イベント駆動型のGUIでUI更新を合理化する
イベント駆動型GUI開発には、多くの場合、バックグラウンドスレッドからUI要素を更新する必要があります。 標準
チェックは、繰り返しのエラーが発生しやすいコードにつながる可能性があります。 この記事では、効率的なソリューションについて説明しますInvokeRequired
問題:退屈な
InvokeRequired
スレッドセーフUIの更新に対する典型的なアプローチは面倒です:
<code class="language-csharp">private void UpdateUI() { if (myControl.InvokeRequired) { myControl.Invoke(new MethodInvoker(() => { UpdateUI(); })); } else { myControl.Text = "Updated Text"; } }</code>
拡張メソッドはよりクリーンなソリューションを提供します:
使用法:
<code class="language-csharp">public static void SafeInvoke(this Control control, Action action) { if (control.InvokeRequired) { control.Invoke(action); } else { action(); } }</code>
<code class="language-csharp">myControl.SafeInvoke(() => myControl.Text = "Updated Text");</code>
に拡大します
ISynchronizeInvoke
幅広い適用可能性については、オブジェクトをサポートするためにメソッドを拡張します:
ISynchronizeInvoke
<code class="language-csharp">public static void SafeInvoke(this ISynchronizeInvoke obj, Action action) { if (obj.InvokeRequired) { obj.Invoke(action, null); } else { action(); } }</code>
の注意事項
InvokeRequired
便利ですが、には制限があります:
InvokeRequired
InvokeRequired
過剰使用はパフォーマンスに影響を与える可能性があります
false
したがって、以上がイベント駆動型GUI開発でUIスレッドを簡素化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。