如何获取后台辅助角色提供的进度值

本文关键字:角色 何获取 获取 后台 | 更新日期: 2023-09-27 18:36:07

BackgroundWorker上有这样的东西吗? 当一个函数以DoWork回调结束时,我ProgressChanged根据函数结束的进度值得到它。

代码示例:

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

当每个语句结束时,我都会得到它

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

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

执行了 33 % => foo()

执行了 66 % => baa()

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

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

我希望这是清楚的。我为我的英语不好而道歉。

如何获取后台辅助角色提供的进度值

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

您必须显式调用.ReportProgress()

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

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

以下方法有问题吗?

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

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