我应该使用MethodInvoker还是Action

时间:2010-11-11 16:01:17

标签: c# .net c#-4.0

  

可能重复:
  MethodInvoker vs Action for Control.BeginInvoke

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

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

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

在C#2.0中我使用了分配MethodInvoker来从后台线程更新UI,在BeginInvoke下使用时切换到Action是否明智?使用Action更快还是更安全?

2 个答案:

答案 0 :(得分:2)

它确实没有什么区别,因为两者都只是没有参数且不返回值的委托类型。但是,就命名语义而言,MethodInvoker特定于WinForms,因此应限于该范围。 Action是通用的,可以在框架的任何区域使用。

答案 1 :(得分:1)

它们都是代理,在定义上相互相同(从MSDN中获取):

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

因此,在IL级别,它们应该完全相同。所以我怀疑你使用哪一个很重要。 Action更具普遍性,更有可能被更多开发人员理解,但MethodInvoker确实具有更具描述性的名称。选择对你感觉更好的人。

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