C# 如何获得BackgroundWorker提供的进度值?

C# 如何获得BackgroundWorker提供的进度值?,c#,backgroundworker,C#,Backgroundworker,在BackgroundWorker上是否有类似的内容?当一个函数在DoWork回调中结束时,我在ProgressChanged上得到一个与函数正在结束一致的进度值 代码示例: bw.DoWork += (a,b) => { foo(); baa(); if(..) else { } }; 当每句话结束时,我都能理解 bw.ProgressChanged += (o, e) => { MessageBox.Show(e.Prog

BackgroundWorker
上是否有类似的内容?当一个函数在
DoWork
回调中结束时,我在
ProgressChanged
上得到一个与函数正在结束一致的进度值

代码示例:

bw.DoWork += (a,b) => {
  foo();
  baa();
  if(..) else {  }
};
当每句话结束时,我都能理解

  bw.ProgressChanged += (o, e) => {
                   MessageBox.Show(e.ProgressPercentage);
   };
我有三个stataments,它应该打印三个
Message.Show()
:33,66100

执行了
33
%=>
foo()

执行了
66
%=>
baa()

100
%=>
如果(..)否则{}
执行了最后一条语句,则结束

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


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

如果我理解你的问题;答案是“不,backgroundworker无法自动报告其进度”

您必须显式地调用
.ReportProgress()


如果您真的要处理DoWork主体中的大量方法调用,那么您可以更聪明地构建一个操作队列,调用每个操作并在每个操作之后调用ReportProgress

如果我理解你的问题;答案是“不,backgroundworker无法自动报告其进度”

您必须显式地调用
.ReportProgress()


如果您真的要处理DoWork主体中的大量方法调用,那么您可以更聪明地构建一个操作队列,调用每个操作并在每个操作之后调用ReportProgress

以下方法有问题吗

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

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

以下方法有问题吗

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

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

为什么调用
ReportProgress
是“不可修改的”?为什么调用
ReportProgress
是“不可修改的”?