如何修改 MVVM 视图模型Progress
在后台线程上完成的工作的属性?
我正在创建一个 MVVM 应用程序,它在后台线程上执行任务,使用Task.Factory.StartNew()
and Parallel.ForEach()
。我在用本文 http://dotnet.dzone.com/articles/parallelizing-windows作为指导。到目前为止,我的代码如下所示:
Task.Factory.StartNew(() => DoWork(fileList, viewModel));
Where fileList
是要处理的文件列表,并且viewModel
是视图模型Progress
财产。这DoWork()
到目前为止,方法看起来像这样:
private object DoWork(string[] fileList, ProgressDialogViewModel viewModel)
{
Parallel.ForEach(fileList, imagePath => ProcessImage(imagePath));
}
The ProcessImage()
方法进行实际的图像处理。视图模型的Progress
属性绑定到对话框中的进度条,该进度条在后台进程开始之前显示。
我想更新视图模型Progress
每次迭代后的属性Parallel.ForEach()
陈述。我需要做的就是增加属性值。我怎么做?感谢您的帮助。
由于该属性是一个简单属性(而不是集合),因此您应该能够直接设置它。 WPF 将自动处理返回 UI 线程的封送处理。
但是,为了避免竞争条件,您需要显式处理“完成”计数器的递增。这可能是这样的:
private object DoWork(string[] fileList, ProgressDialogViewModel viewModel)
{
int done; // For proper synchronization
Parallel.ForEach(fileList,
imagePath =>
{
ProcessImage(imagePath));
Interlocked.Increment(ref done);
viewModel.Progress = done;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)