如何获取BackgroundWorker提供的进度值?

时间:2012-05-31 18:50:23

标签: c# backgroundworker

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方法,但根据语句数字,这可以是不可行的。

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

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题;答案是'不,背景工作者无法自动报告其进度'。

您必须明确拨打.ReportProgress()

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

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

答案 1 :(得分:2)

以下方法有问题吗?

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

我只会尝试在ReportProgressfoo内调用baa,如果有一些令人信服的理由(即从33增加到66,一次增加几个百分点,在foo)内。

相关问题