在 C# WPF 应用程序中,如果在以下按钮单击事件 habdler:
private void start_Click(object sender, RoutedEventArgs e)
{
for (int i = 2; i < 20; i++)
{
var t = Task.Factory.StartNew
(() =>
{
var result=Thread.CurrentThread.ManagedThreadId.ToString();
//this.Dispatcher.BeginInvoke(new Action(() =>
textBlock1.Text += "root " + i.ToString() + " " +
result + Environment.NewLine
;//to comment this line if to uncomment th others
//), null);
}
);
}
}
取消注释注释行,即输出到文本块,Dispatcher.BeginInvoke()
然后填充不同的线程ID。
尽管有注释行,如上所示,文本块保持空白并且没有抛出异常。
在类似情况下使用Parallel.For
private void start_Click(object sender, RoutedEventArgs e)
{
Parallel.For(2, 6, (i)
=> {
var result = Thread.CurrentThread.ManagedThreadId.ToString();
textBlock1.Text += "root " + i.ToString() + " " +
result + Environment.NewLine;
} );
}
应用程序异常中断:
“调用线程无法访问此对象,因为不同的线程拥有它”
为什么在使用时不会在第一种情况下抛出它Task.Factory.StartNew()
?
有什么办法可以确保这个例外?