printDelegate()与printDelegate.Invoke()
示例代码如下:
delete void PrintDeletegate();
void Print2()
{
//...若干行代码
}
void Main(){
//new一个委托
var printDeletegate = new PrintDeletegate(Print2);
//调用委托,以下两种方式都可以
printDeletegate();
printDeletegate.Invoke();
}
那么printDelegate()与printDelegate.Invoke()有什么差异呢?
printDelegate()是printDelegate.Invoke()的语法糖。
编译器遇到printDelegate()时,会将它转换为printDelegate.Invoke()。
Invoke()方法是委托类型本身提供的一个方法,用于显示地调用委托所指向的方法。
另外, Invoke()方法在多线程环境下也有特殊用途:
Invoke()方法可以用在拥有该控件的线程上执行委托方法,一避免跨线程操作的异常。