将 Parallel.ForEach 与 WPF Dispatcher一起使用.你如何让这两个人很好地相互配合



我可以在我的ViewModel类中执行以下操作:

var inc = 100.0d / total;
Parallel.ForEach(enumeration, new ParallelOptions { MaxDegreeOfParallelism = 8 },
    item =>
    {
        //Do Parallel Tasks
        lock (ProgressLock)
        {
            WorkProgress += inc; //This raises a PropertyChanged event (binding).
        }
    });

我遇到的问题是让每个并行任务都具有 UI 响应能力。任何帮助都会很棒。谢谢!

不能在调度程序线程上运行Parallel.ForEach。 它将阻塞线程,直到整个过程完成,此时,绑定将更新。

如果需要在执行时更新绑定,可以将整个过程包装到后台任务中。 只要WorkProgress是一个简单的数字,如果绑定是在后台线程中设置的,则绑定的行为应该是属性。

这可以像这样简单:

Task.Factory.StartNew( () =>
{
  Parallel.ForEach(enumeration, new ParallelOptions { MaxDegreeOfParallelism = 8 },
   item =>
   {
    //Do Parallel Tasks
    lock (ProgressLock)
    {
        WorkProgress += inc; //This raises a PropertyChanged event (binding).
    }
   });
});

不能在保持一个线程的同时使用多线程。

相反,您可以使用调度程序在 UI 线程上调用属性资源库。

最新更新