我正在尝试使用BackgroundWorker
执行在循环内更新UI上的进度条的简单操作。我不知道自己做错了什么。非常感谢任何帮助。
private void ProcessButtonClickAction(object param)
{
BackgroundWorker BGWUpdateUi = new BackgroundWorker();
BGWUpdateUi.ProgressChanged += (sender, args) =>
{
ProgressBarValue += args.ProgressPercentage;
((SelectedDwgFile)args.UserState).Status = "Completed";
};
BGWUpdateUi.WorkerReportsProgress = true;
foreach(var obj in FileList)
{
Thread.Sleep(250);
BGWUpdateUi.ReportProgress(pbvalueIncrement, obj);
}
}
该集合是ObservableCollection
,ProgressBarValue
绑定到进度条的值。
我已经查看了几个示例,无论我尝试哪一个 - BackgroundWorker
,Dispatcher
- 它们都会在循环后更新。
答案 0 :(得分:3)
将要在后台运行的部分放入DoWork
方法,然后调用RunWorkerAsync
:
private void ProcessButtonClickAction(object param)
{
BackgroundWorker BGWUpdateUi = new BackgroundWorker()
BGWUpdateUi.DoWork += (sender, args) =>
{
foreach (var obj in FileList)
{
Thread.Sleep(250);
obj.Status = "Completed";
ProgressBarValue += pbvalueIncrement;
}
};
BGWUpdateUi.RunWorkerAsync();
}
此外,请确保将与UI相关的更新分发回UI线程(否则您将获得跨线程访问异常)。