らくがきちょう

なんとなく

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

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

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;
    }
}