有什么区别:
this.btnConnect.Click += btnConnect_Click;
和
this.btnConnect.Click += new RoutedEventHandler(btnConnect_Click);
它似乎以相同的方式工作,但Visual Studio IntelliSense插入第二个示例,我很好奇为什么。
我最初的猜测是,使用IntelliSense版本会使每个按钮调用自己的RoutedEventHandler
实例,使其具有线程安全性?
并且使用第一个示例,然后每个按钮将调用该方法的相同实例,并且他们可能会互相踩到脚。
答案 0 :(得分:3)
同样的事情,第一个只是一个语法糖,即编译器为两者生成相同的IL字节码 - 总是创建一个委托实例。
IIRC,第一个版本的C#不允许第一个语法,它是在C#2.0中引入的。答案 1 :(得分:0)
您也可以使用Lambda来创建RoutedEventHandler:
new RoutedEventHandler(
(sendItem, args) =>
{
//things you want to do
IsTopMost = !IsTopMost;
this.Topmost = IsTopMost;
((MenuItem) sendItem).Header = menuWords[0, ++menuClickCount[0]%2];
})