中,
簡化UI更新
InvokeRequired
>事件驅動的GUI開發通常需要從背景線程中更新UI元素。 標準檢查可以導致重複且容易出錯的代碼。 本文探討了有效的解決方案。
問題:乏味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中文網其他相關文章!