MVVM 中的后台线程进度通知?

2024-03-10

如何修改 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(使用前将#替换为@)

MVVM 中的后台线程进度通知? 的相关文章

随机推荐