BeginInvoke / EndInvoke是否可以在主线程上调用?

时间:2010-10-21 07:00:04

标签: c# delegates

为MainForm线程调用委托是不错的做法 - 这样?:

Txt.MainForm.EndInvoke(
Txt.MainForm.BeginInvoke(
    new MethodInvoker(delegate() 
       { // code here }
)));

3 个答案:

答案 0 :(得分:8)

否 - 因为如果您正在呼叫EndInvoke,那么在代表完成之前将会阻止。如果您想要这种行为,请改用Invoke

换句话说:如果你试图做某事其他而不是阻塞,直到你的(可能是UI修改)委托在UI线程中执行,你应该解释一下这是什么。如果没有其他内容,那么Invoke将为您提供更简单的代码。

答案 1 :(得分:2)

由于代码触发异步调用然后立即等待调用完成,因此没有多大意义。即你最终在调用线程上等待。

答案 2 :(得分:0)

不考虑其他人提到的事情(我相信这个EndInvoke - BeginInvoke链只是委托的一个示例用法):使用委托是100%好的。如果这是委托主体的唯一用法,则无需将其定义为命名方法。它在代码中更干净,无需跳过文件。考虑为委托使用更新的语法:

new MethodInvoker(() => { // code here })