如何报告BackgroundWorker在类库中的对象中执行的工作进度?如何在使用BackgroundWorker时报告在类库中进行的工作进度
我到目前为止还不确定如何使用ReportProgress来反馈信息(由于循环依赖性,无法引用调用类)。
这是启动工作的主要项目的例子:
namespace MainProject {
class MainWindowVM : INotifyPropertyChanged {
private BackgroundWorker _counterWorker;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private int _progress;
public int Progress {
get { return _progress; }
set { _progress = value; NotifyPropertyChanged(); }
}
public MainWindowVM() {
var heavyWorker = new ClassLibrary.HeavyWorkerClass();
_counterWorker = new BackgroundWorker();
_counterWorker.DoWork += new DoWorkEventHandler(_counterWorker_DoWork);
_counterWorker.RunWorkerAsync(heavyWorker);
}
private void _counterWorker_DoWork(object sender, DoWorkEventArgs e) {
var heavyWorker = (ClassLibrary.HeavyWorkerClass)e.Argument;
heavyWorker.StartWork();
Progress = 100;
System.Windows.MessageBox.Show("Work completed!");
}
}
}
下面是在类库上传方法的一个例子:
namespace ClassLibrary {
public class HeavyWorkerClass {
public void StartWork() {
for (int i = 0; i <= 100; i++) {
Thread.Sleep(50);
}
}
}
}
去看一下'ReportProgress'方法? [有](https://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners)是这个 – lena
许多教程之一没有一个很好的[mcve],清楚地说明你遇到的任何问题有,不可能知道你需要什么答案(发布答案的任何人只是猜测,并没有真正的业务这样做)。如果你编写你的WPF程序“正常”,那么你有视图模型,实现INotifyPropertyChanged绑定到UI对象,你可以根据需要设置视图模型属性值。 WPF将为你处理所有的交叉线程内容。如果你不是以正常的方式编写WPF,那么它会变得更加复杂,但是如果没有MCVE,精确的细节会有所不同。 –
[更新GUI使用BackgroundWorker]的可能重复(http://stackoverflow.com/questions/5192169/update-gui-using-backgroundworker) –