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