ホームページ > バックエンド開発 > C++ > 別のスレッドから C# TextBox を安全に更新するにはどうすればよいですか?

別のスレッドから C# TextBox を安全に更新するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-31 20:37:13
オリジナル
360 人が閲覧しました

How to Safely Update a C# TextBox from a Separate Thread?

C# の別のスレッドから TextBox を更新する

Windows フォーム アプリケーションでは、非 UI スレッドから UI 要素にアクセスしないようにすることが重要です。別のスレッドから TextBox を操作しようとすると、「この種類の操作はこのスレッドでは無効です」という例外が発生することがあります。これに対処するには、クロススレッド通信を適切に処理する必要があります。

別のスレッドから TextBox を更新するには、Control クラスの InvokeRequired プロパティをチェックするメソッドをメイン フォームに作成する必要があります。 InvokeRequired が true の場合、呼び出しが非 UI スレッドから行われていることを意味し、Invoke メソッドを使用して呼び出しを UI スレッドにマーシャリングする必要があります。

たとえば、次のコード スニペットを考えてみましょう。 :

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        new Thread(SampleFunction).Start();
    }

    public void AppendTextBox(string value)
    {
        if (InvokeRequired)
        {
            this.Invoke(new Action<string>(AppendTextBox), new object[] { value });
            return;
        }
        ActiveForm.Text += value;
    }

    void SampleFunction()
    {
        // Gets executed on a separate thread
        for (int i = 0; i < 5; i++)
        {
            AppendTextBox("hi. ");
            Thread.Sleep(1000);
        }
    }
}
ログイン後にコピー

この例では、AppendTextBox メソッドが InvokeRequired フラグをチェックし、必要に応じて Invoke を使用してマーシャリングします。 UI スレッドの呼び出し。 SampleFunction メソッド内では、AppendTextBox メソッドを別のスレッドから例外を発生させることなく安全に呼び出すことができます。このアプローチにより、スレッドの安全性を維持しながら、非 UI スレッドから UI 要素を更新できます。

以上が別のスレッドから C# TextBox を安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート