我能够从代码1更新UI而不是从2Task.Parallel更新UI。为什么这样?
代码1
Parallel.ForEach(names, name =>
{
lblText.Text += "\n" + name + " Thread " + Thread.CurrentThread.ManagedThreadId;
});
代码2
Task.Factory.StartNew(() =>
{
Parallel.ForEach(names, name =>
{
lblText.Text += "\n" + name + " Thread " + Thread.CurrentThread.ManagedThreadId;
});
});
我知道代码2不会更新用户界面,因为它的辅助线程。但为什么代码1更新UI?不平行foreach运行不同的线程?如果是的话,为什么它更新UI?
的代码1输出
Parallel.ForEach重用父线程,这就是它阻塞的原因。其中一个线程实际上是UI线程,所以在更新UI –
时没有问题,但如果它使用父线程,那么为什么有两个不同的线程ID? –
此代码在哪里运行? –