0

上面有这样的BackgroundWorker吗?当一个函数在DoWork回调中结束时,我会ProgressChanged根据函数的结束来获取这个进度的值。

代码示例:

bw.DoWork += (a,b) => {
  foo();
  baa();
  if(..) else {  }
};

当每个语句结束时,我开始

  bw.ProgressChanged += (o, e) => {
                   MessageBox.Show(e.ProgressPercentage);
   };

我有三个stataments,它应该打印三个Message.Show():33,66,100

33% =>foo()被执行。

66% =>baa()被执行。

100% => if(..) else { }最后一条语句被执行,完成。

我可以.ReportProgress()在回调事件上运行的每个函数/语句中调用方法DoWork,但是根据语句编号,这可能是不可行的。

我希望这很清楚。我为我糟糕的英语道歉。

4

2 回答 2

2

如果我理解你的问题;答案是“不,后台工作人员无法自动报告其进度”。

您必须明确调用 .ReportProgress()

bw.DoWork += (a,b) => {
  foo();
  worker.ReportProgress(33);
  baa();
  worker.ReportProgress(66);
  if(..) else {  }
};

如果你真的要处理 DoWork 主体中的大量方法调用,你可以变得聪明,做一些事情,比如构建一个动作队列,调用每个动作并在每个动作之后调用 ReportProgress。

于 2012-05-31T18:58:00.807 回答
2

以下方法有问题吗?

bw.DoWork += (a,b) => {
  foo();
  bw.ReportProgress(33);
  baa();
  bw.ReportProgress(66);
  if(..) else {  }
  bw.ReportProgress(100);
};

我只会尝试调用ReportProgressinside offoo或者baa如果有一些令人信服的理由(即从 33 增加到 66,一次增加几个百分比, inside of foo)。

于 2012-05-31T18:58:04.703 回答