C# で UI コントロールにスレッドセーフなアクセスをする

Windows Form アプリケーションを作成する際に UI コントロールへスレッドセーフにアクセスするには一工夫、必要です。 例えば TextBox に文字列を設定する場合、C# だと以下のように書けます。 InvokeRequiredInvoke が必要な場合は MethodInvoker を使います。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
private void SetText(TextBox txtBox, string text)
{
    if (txtBox.IsDisposed) return;
    if (txtBox.InvokeRequired)
    {
        this.Invoke((MethodInvoker)delegate { SetText(txtBox, text); });
    }
    else
    {
        txtBox.Text = text;
    }
}