在事件驱动的GUIS
中,
简化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中文网其他相关文章!