【问题标题】:Should I use MethodInvoker or Action [duplicate]我应该使用 MethodInvoker 还是 Action [重复]
【发布时间】:2011-05-08 13:38:45
【问题描述】:

可能重复:
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 是否更快或更安全?

【问题讨论】:

标签: c# .net c#-4.0


【解决方案1】:

它们都是代表,并且在定义上彼此相同(从 MSDN 中获取):

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

所以在 IL 级别上,它们应该几乎相同。所以我怀疑你使用哪一个很重要。 Action 更通用,更容易被更多开发人员理解,但MethodInvoker 确实有一个更具描述性的名称。选择对您感觉更好的人。

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

【讨论】:

    【解决方案2】:

    实际上并没有什么不同,因为两者都是简单的委托类型,不带参数也不返回值。但是,就命名语义而言,MethodInvoker 是特定于 WinForms 的,因此应限制在该范围内。 Action 是通用的,可用于框架的任何区域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 2021-03-30
      • 2010-11-13
      • 1970-01-01
      • 2013-01-30
      • 2011-08-08
      • 2020-08-23
      • 2020-03-15
      相关资源
      最近更新 更多