繁体   English   中英

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

[英]What is difference between Control.BeginInvoke() and Dispatcher.BeginInvoke()?

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

我知道可以问类比问题,以获取Control.Invoke()Dispatcher.Invoke()之间的区别。

Control.BeginInvoke从.NET的早期版本开始存在(至少1.1版)。 如果您有一个控件并且想要在其UI线程上运行某些东西(可以有多个UI线程 ),那么这是非常自然的选择。 但是,如果您想在UI线程上运行常规操作,并且没有合适的Control那么骇人的解决方案是创建一个不会出现在UI中的Control ,然后在该ControlInvoke

在.NET 3(IIRC)中,添加了Dispatcher以解决此问题。

简而言之:

  • 如果您有Control ,则可以使用Control.BeginInvoke
  • 如果没有适当的控件,请提前创建一个Dispatcher并使用Dispatcher.BeginInvoke
  • 如果您处于遥远的过去,则只能使用Control.BeginInvoke :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM