我可以在我的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响应。任何援助都会很棒。谢谢!
答案 0 :(得分: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).
}
});
});
答案 1 :(得分:0)
你也不能使用多线程,同时也要坚持一个线程。
相反,您可以使用Dispatcher在UI线程上调用属性设置器。