首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Control.BeginInvoke()和Dispatcher.BeginInvoke()之间有什么区别?

Control.BeginInvoke()和Dispatcher.BeginInvoke()之间有什么区别?
EN

Stack Overflow用户
提问于 2015-04-21 15:01:24
回答 1查看 415关注 0票数 1

最近,我使用Control.BeginInvoke()方法将方法调用放入队列中,以便稍后在UI线程上调用。我也知道有Dispatcher.BeginInvoke()方法。我阅读了一些通用资源(就像在CodeProject上这样),仍然有一个问题:Control.BeginInvoke()的行为是否与Dispatcher.BeginInvoke()不同。

我知道类似的问题可以被问到Control.Invoke()Dispatcher.Invoke()之间的区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 06:44:42

Control.BeginInvoke存在于.NET的早期(至少1.1版)。如果您有一个控件,并且希望在它的UI线程上运行一些东西(可以是几个UI线程),这是非常自然的。但是,如果您想在UI线程上运行一些通用的东西,并且没有一个适当的Control,那么恶意的解决方案就是创建一个Control,它不会出现在UI中,然后在UI上出现Invoke

在.NET 3中加入了Dispatcher来解决这个问题。

简言之:

  • 如果您手头有一个Control,可以使用Control.BeginInvoke
  • 如果您没有适当的控件,请创建一个Dispatcher (提前)并使用Dispatcher.BeginInvoke
  • 如果您在遥远的过去,您别无选择,只能使用Control.BeginInvoke :)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29775965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档