我可以在我的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 线程上调用属性资源库。