1

我可以在 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。任何帮助都会很棒。谢谢!

4

2 回答 2

2

您不能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).
    }
   });
});
于 2012-05-15T00:52:56.533 回答
0

您不能使用多线程同时也停留在一个线程上。

相反,您可以使用 Dispatcher 在 UI 线程上调用属性设置器。

于 2012-05-15T00:52:53.100 回答