Control.Invoke() 与 Control.BeginInvoke() [重复]

Posted

技术标签:

【中文标题】Control.Invoke() 与 Control.BeginInvoke() [重复]【英文标题】:Control.Invoke() vs. Control.BeginInvoke() [duplicate] 【发布时间】:2011-06-29 15:05:01 【问题描述】:

可能重复:What's the difference between Invoke() and BeginInvoke()

首先,由于英语不是我的母语,我想为我的语法错误道歉。

这是我的理解:

Control.Invoke(delegated_method)  // Executes on the thread wich the control was created on
witch holds its handle ,typically  this would be the main thread of a winform application .

Control.BeginInvoke(delegated_method // Executes asynchronously on a threadPool Thread .

根据MSDN,它说

异步执行委托 控件的线程 基础句柄创建于。

我的问题:

我理解beginInvoke在这件事上把主线程当作线程池对待,当它“有机会”时在主线程上执行委托方法?

提出的另一个问题, 是否可以在主线程上创建控件? 如果是这样,有人可以给我一个例子吗?

【问题讨论】:

***.com/questions/229554/… 你的语法比大多数以英语为母语的人都好;但是,您需要返回并接受一些问题的答案(点击您认为最佳答案旁边的绿色复选标记) 【参考方案1】:

是的,它将在创建它的 UI 线程的调度程序上执行。

至于在后台线程上创建控件,我不建议这样做。此外,您还没有提到您正在使用什么技术。

【讨论】:

以上是关于Control.Invoke() 与 Control.BeginInvoke() [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 out 参数的 control.invoke

Control.Invoke() 与其委托的调用之间的延迟是多长时间?

System.Windows.Forms.Control.Invoke涓嶣eginInvoke

Invoke()/BeginInvoke()区别

C#中线程对控件的访问

"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"