代码之家  ›  专栏  ›  技术社区  ›  Przemysław Michalski

BeginInvoke/EndInvoke是在主线程上调用的良好实践吗?

  •  4
  • Przemysław Michalski  · 技术社区  · 14 年前

    调用mainform线程的委托是一个好的实践吗?这样做?:

    Txt.MainForm.EndInvoke(
    Txt.MainForm.BeginInvoke(
        new MethodInvoker(delegate() 
           { // code here }
    )));
    
    3 回复  |  直到 14 年前
        1
  •  8
  •   Jon Skeet    14 年前

    不-因为如果你打电话来 EndInvoke ,在代理完成之前将阻止。如果你想要这种行为,就用 Invoke 相反。

    换一种说法:如果你想做点什么 其他 在UI线程中执行(可能是用户界面修改)委托之前,您应该解释这是什么。如果没有别的东西,那么 援引 将为您提供更简单的代码。

        2
  •  2
  •   Brian Rasmussen    14 年前

    当代码触发异步调用,然后立即等待调用完成时,这并没有什么意义。也就是说,你最终在等待主叫线。

        3
  •  0
  •   NOtherDev    14 年前

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

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