我能夠從代碼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? –
此代碼在哪裏運行? –