栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

自动执行InvokeRequired代码模式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自动执行InvokeRequired代码模式

李的方法可以进一步简化

public static void InvokeIfRequired(this Control control, MethodInvoker action){    // See Update 2 for edits Mike de Klerk suggests to insert here.    if (control.InvokeRequired) {        control.Invoke(action);    } else {        action();    }}

可以这样称呼

richEditControl1.InvokeIfRequired(() =>{    // Do anything you want with the control here    richEditControl1.RtfText = value;    RtfHelpers.AddMissingStyles(richEditControl1);});

无需将控件作为参数传递给委托。C#自动创建一个闭包。


更新

根据其他几个海报

Control
可以概括为
ISynchronizeInvoke

public static void InvokeIfRequired(this ISynchronizeInvoke obj,        MethodInvoker action){    if (obj.InvokeRequired) {        var args = new object[0];        obj.Invoke(action, args);    } else {        action();    }}

DonBoitnott指出,与接口不同,

Control
ISynchronizeInvoke
接口需要该
Invoke
方法的对象数组作为的参数列表
action


更新2

Mike de Klerk建议进行的编辑(有关插入点,请参见第一个代码段中的注释):

// When the form, thus the control, isn't visible yet, InvokeRequired  returns false,// resulting still in a cross-thread exception.while (!control.Visible){    System.Threading.Thread.Sleep(50);}

有关此建议的担忧,请参见下面的ToolmakerSteve的评论。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号