ホームページ > バックエンド開発 > C++ > 非 UI スレッドから C# Windows フォーム TextBox を安全に更新する方法

非 UI スレッドから C# Windows フォーム TextBox を安全に更新する方法

Patricia Arquette
リリース: 2024-12-31 07:14:10
オリジナル
738 人が閲覧しました

How to Safely Update a C# Windows Forms TextBox from a Non-UI Thread?

C# Windows フォーム アプリケーションで別のスレッドから TextBox に書き込む方法

C# Windows フォーム アプリケーションで、次の内容を変更しますUI スレッド以外のスレッドからの TextBox は、スレッドの問題を引き起こす可能性があります。これに対処するには、スレッド セーフティの概念を理解することが不可欠です。

スレッド セーフティを理解する

スレッド セーフティとは、コード ブロックまたはオブジェクトが実行される機能を指します。意図しない副作用を引き起こすことなく、複数のスレッドで同時に実行できます。 Windows フォーム アプリケーションのコンテキストでは、TextBox を含む UI コントロールはスレッド セーフではありません。非 UI スレッドからプロパティを更新しようとすると、例外や予期しない動作が発生する可能性があります。

解決策: コントロール メソッドの呼び出し

別のスレッドから UI 要素を安全に変更するにはスレッドの場合は、コントロールの Invoke メソッドまたは BeginInvoke メソッドを使用してそのメソッドを呼び出す必要があります。これらのメソッドにより、操作が UI スレッドにマーシャリングされます。UI スレッドは、コントロールと安全に対話できる唯一のスレッドです。

コード サンプル

次のコードを検討してください。 Invoke メソッドを使用して別のスレッドから TextBox に書き込む方法を示すサンプル:

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

    public void AppendTextBox(string value)
    {
        if (InvokeRequired)
        {
            // Invoke the AppendTextBox method if the current thread is not the UI thread.
            this.Invoke(new Action<string>(AppendTextBox), new object[] { value });
            return;
        }
        textBox1.Text += value;
    }

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

この例ではコード:

  • AppendTextBox メソッドは、スレッド セーフティの問題を処理するために定義されています。
  • SampleFunction は別のスレッドで実行され、AppendTextBox メソッドを呼び出すことで TextBox に書き込みます。
  • InvokeRequired プロパティは、現在のスレッドが UI スレッドでないかどうかを確認します。存在する場合、UI スレッドで AppendTextBox メソッドを呼び出します。これにより、TextBox が安全に更新されます。

以上が非 UI スレッドから C# Windows フォーム TextBox を安全に更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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