不带参数调用委托?

时间:2010-03-07 10:10:09

标签: c# delegates

我想知道Invoke(委托)方法。我不明白为什么我不需要指定参数。如果我需要他们供应怎么办。在下面你更好地理解我的意思。谢谢

 EventHandler a = new EventHandler(this.A);
            Invoke(a); //where doest it take the arguments from?

            a(); //does not work, missing arguments

2 个答案:

答案 0 :(得分:7)

由于Invoke旨在用于Windows窗体,并且此处使用的事件模式已明确指定,因此Invoke方法可以进行有根据的猜测。事实上,it is documented on MSDN正是它的作用,如果你尝试使用Invoke调用不带参数的EventHandler:

  

委托可以是EventHandler的一个实例,在这种情况下   sender参数将包含此控件和事件参数   将包含EventArgs.Empty。

您可以而且应该使用Invoke的重载,它允许您指定代理的参数,以使其更明确地发生了什么。此外,调用不带参数数组的Invoke只适用于 EventHandler 类型的代理(当然,也可以是首先不接受任何参数的代理)。

答案 1 :(得分:0)

我不使用EventHandlers,但我确实在委托上使用动态调用。通常,对我来说,代码最终看起来像这样

a.Invoke(new object[] { arg0, .... argn });
相关问题