在执行我的 win forms 应用程序时,我会得到一个跨线程异常,这似乎是一个随机的机会。这是我试图管理它的方式:
private void ToOutput(string s)
{
if (!this.IsHandleCreated)
this.CreateHandle();
if (FormOutputArea.InvokeRequired)
{
FormOutputArea.Invoke(new Action(delegate ()
{
FormOutputArea.AppendText(s + Environment.NewLine);
}));
}
else
{
FormOutputArea.AppendText(s + Environment.NewLine);
}
}
它似乎InvokeRequired
并不总是准确的。我尝试BeginInvoke
了相同的结果。
编辑:即使我检查IsHandleCreated
并InvokeRequired
使用断点,它们也设置为 true,但else
条件的分支仍被执行。
这是一个屏幕截图,显示了现在抛出异常的位置: