winフォームアプリケーションの実行時にクロススレッド例外が発生する可能性はランダムにあるようです. これが私がそれを管理しようとしている方法です:
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
が、条件の分岐は実行されます。
例外がスローされた場所を示すスクリーンショットを次に示します。