Delegate Control BeginInvoke Invoke
Control.Invoke()方法所执行的委托方法跟创建UI元素的线程是一个线程,也就是主线程。Control.Invoke()虽然执行了委托方法,但是并没有创建新的线程,而且从实验结果出现的先后顺序可以得知,Invoke()是同步独占式的执行,
Control的Invoke和BeginInvoke的委托方法是在主线程,即UI线程上执行的。如果委托方法不会花费很长的时间,那直接用Control.Invoke()和Control.BeginInvoke()方法,如果你的委托方法用来取花费时间长的数据,然后更新界面什么的,千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死,那么我们该该如何办呢?最好的解决办法就是重新建立一个线程,然后在线程调用函数里再启用Control.Invoke()或者Control.BeginInvoke()
BeginInvoke()和Invoke()还有朋友问Delegate的BeginInvoke()、Invoke()和Contorl.BeginInvoke()、Invoke()的区别,之前的章节中有介绍过Delegate的BeginInvoke(),委托的BeginInvoke()主要用于异步操作,其本质是在线程池里又启用了一个新的后台线程,而Contorl.BeginInvoke()它本身就是在创建控件的线程里(也就是UI)线程里执行的,它主要依附于具体的UI元素,可以直接的访问UI元素,但是通过委托的BeginInvoke()是绝对不能访问UI元素的
posted on 2022-08-10 14:11 qq1151219115 阅读(19) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性