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
方法,但根据语句数字,这可以是不可行的。
我希望这很清楚。我为我糟糕的英语道歉。
答案 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);
};
我只会尝试在ReportProgress
或foo
内调用baa
,如果有一些令人信服的理由(即从33增加到66,一次增加几个百分点,在foo
)内。