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
是“不可修改的”?