Windowsフォーム コントロールのスレッド セーフな呼び出し
- コントロールのInvokeRequiredプロパティから、スレッドが異なるか確認する。
- コントロールと同一のスレッドで実行されるように処理します。
- スレッドが異なる : コントロールと同一のスレッドで実行されるように、delegateを使用してInvokeメソッドから呼び出す。
- スレッドが同一 : コントロールを直接呼び出す。
private System.Windows.Forms.TextBox textBox;
delegate void SetTextCallback( string text );
private void SetText( string text )
{
if( this.textBox.InvokeRequired )
{
SetTextCallback delegateMethod = new SetTextCallback( SetText );
this.Invoke( delegateMethod, new object[] { text } );
}
else
{
this.textBox.Text = text;
}
}