如何获取后台辅助角色提供的进度值
本文关键字:角色 何获取 获取 后台 | 更新日期: 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);
};
我只会尝试在foo
或baa
内部调用ReportProgress
,如果有令人信服的理由(即从 33 增加到 66,一次增加百分之几,在 foo
内部)。