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/