2010-11-11 28 views
3

可能重复:
MethodInvoker vs Action for Control.BeginInvoke我应该使用MethodInvoker或行动

ThreadPool.QueueUserWorkItem(x => 
     { 
      //get dataset from web service 

      BeginInvoke(new Action(() => { 
       //fill grid 
      })); 

      BeginInvoke(new MethodInvoker(() => { 
       //fill grid 
      })); 
     }); 

在C#中我用配发的MethodInvoker更新从后台线程的UI 2.0,将它在BeginInvoke下使用时切换到Action是明智的吗?使用Action更快还是更安全?

+1

我对那些暗示他不使用的人感到困惑。他们使用的是不同于我的C#编译器吗?我使我传递了从'System.Delegate'派生的东西。请参阅http://stackoverflow.com/questions/253138/anonymous-method-in-invoke-call/253150#253150 – mquander 2010-11-11 16:13:03

+0

一个类似的问题已被问及在这里回答stackoverflow http://stackoverflow.com/questions/1167771/ methodinvoker-VS-行动对控制的BeginInvoke – Sam 2010-11-11 16:07:49

回答

1

他们都是代表,并在定义(从MSDN抓起)彼此相同:

public delegate void MethodInvoker() 
public delegate void Action() 

所以在IL水平,他们应该是非常一致的。所以我很怀疑你使用哪一个。 Action更具普遍性,更有可能被更多开发人员理解,但MethodInvoker确实具有更具描述性的名称。选择一个对你感觉更好的人。

但正如davidsoa指出的那样,您可以跳过它们并直接使用lambda。

2

它确实没有什么区别,因为两者都是不带参数且不返回值的委托类型。但是,在命名语义方面,MethodInvoker是特定于WinForms的,因此应限制在该范围内。 Action是全功能的,可用于框架的任何区域。

相关问题