【发布时间】:2016-04-26 09:18:42
【问题描述】:
我来自 WPF,我是 WinForms 的新手。在调查跨线程情况时,没有发生我预期的跨线程异常。
这是我的情况的基本总结。有一个名为label1 的Label 控件和一个名为button1 的Button。 button1 的点击事件处理程序基本上如下所示:
private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(()=>
{
label1.Text = "Some-Other-New-Text";
});
}
这并没有像我期望的那样引发跨线程异常。这是因为 WinForms 应用程序没有跨线程问题吗?请注意,我在 Visual Studio 2013 和 Visual Studio 2010 中对此进行了调查。
【问题讨论】:
-
@有时有效,有时无效。跨线程异常不一致。
-
也许
Control.CheckForIllegalCrossThreadCalls被设置为false? -
@WonHyoungLee 不确定我是否理解正确。如果标志为假,那么它当然可以正常工作,并且标签会更改。如果标志是
true,程序检查非法的跨线程调用,唯一奇怪的是异常杀死线程而没有在任何地方冒泡。 -
我也很惊讶它(有时?)默认情况下是错误的。我强烈建议将其设置为 true 并确保仅从 ui 线程更新 ui 元素。
-
@RenéVogt 根据最新的参考源默认设置为
Debugger.IsAttached。所以它在调试器中崩溃,但在调试器之外“工作”。
标签: c# .net multithreading winforms exception