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 サイトの他の関連記事を参照してください。