.NET
でのスレッドの安全性とGUIの更新マルチスレッドGUIアプリケーションでは、多くの場合、メインUIスレッド以外のスレッドからUI要素を更新する必要があります。 バックグラウンドスレッドからUIコントロールに直接アクセスすることは安全ではなく、予測不可能な動作やクラッシュにつながる可能性があります。 .NETは、これらの更新をUIスレッドに安全にマーシャリングするメカニズムを提供します。
一般的なソリューションには、メソッドの使用が含まれます。この方法を使用すると、UIスレッドでデリゲートを実行して、スレッドの安全性を確保できます。 以下は、背景スレッドからラベルのテキストを更新する簡単な例です。
Invoke
<code class="language-csharp">// Running on the worker thread string newText = "abc"; form.Label.Invoke((MethodInvoker)delegate { // Running on the UI thread form.Label.Text = newText; }); // Back on the worker thread</code>メソッドは、
プロパティを更新する匿名のデリゲートを取ります。 デリゲートはUIスレッドで実行され、スレッドの競合を防ぎます。
Invoke
Text
が
操作であることを理解することが重要です。 バックグラウンドスレッドは、UIスレッドがデリゲートの実行を完了するまでブロックされます。 非ブロッキングの更新を必要とするシナリオについては、代わりにInvoke
を使用することを検討してください。 これにより、UIアップデートがUIスレッドで実行されるためにキューがキューになっている間に、バックグラウンドスレッドが処理を続けることができます。
以上が.NETの非UIスレッドからGUI要素を安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。