MethodInvoker的这两种用法之间到底有什么区别:

1:

textBox1.Invoke(new MethodInvoker(b));


2:

textBox1.Invoke((MethodInvoker)delegate { b(); });


我只知道,如果需要,变量2允许我使用参数调用b()。
但是这两个版本有什么区别?

第1版对我很清楚:
我创建一个新的委托并将其传递给我的b()方法,该方法具有与MethodInvoker委托相同的返回类型和参数。代表的标准案例。

但是版本2到底是什么? “ delegate”关键字在这里意味着什么?

最佳答案

V1创建一个新的MethodInvoker对象,并将其作为参数传递给您的b方法。 MethodInvoker然后用b做的事情是类本身。

在V2中,您将创建一个匿名方法并将其强制转换为MethodInvoker,并且不要实例化任何“附加对象”,并且您的委托将“直接”执行。使用Lambdas调用此方法的另一种更短的方法:

textBox1.Invoke(() => b()); // or .Invoke((Action)() => b());


在V1中,您也可以将MethodInvoker替换为自己的实现,例如一个TryCatchLogInvoker,它不直接执行b,而是将其包装以记录发生在“ b内部”的异常。

关于c# - MethodInvoker的两种用法之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23219061/

10-17 00:52