【发布时间】:2014-05-02 16:13:21
【问题描述】:
我(不可否认)的理解是,您应该能够向 C# 事件添加任意数量的委托,并且它们都会被调用(以某种未定义的顺序)。但在我的项目中似乎并非如此。我把它归结为添加到 NSButton 的 Activated 事件中的两个代表(这是在 MonoMac 中),如下所示:
nsButton = new NSButton(new System.Drawing.RectangleF(0, 0, 100, 100));
nsButton.StringValue = "Click me!";
nsButton.Activated += delegate(object sender, EventArgs e) {
Console.WriteLine("Handler 1!");
};
nsButton.Activated += delegate(object sender, EventArgs e) {
Console.WriteLine("Handler 2?");
};
(当然,然后这个按钮被添加到一个窗口中)。当我单击它时,我会看到“处理程序 1!”但我没有看到“处理程序 2?”出现在控制台中。如果我注释掉添加处理程序 1 的行,则处理程序 2 会触发。
它的行为就像只有添加的第一个委托有效,而任何后续委托都被忽略了。但这违背了我能找到的关于 C# 中的事件应该如何工作的一切。我做错了什么?
【问题讨论】:
-
考虑查看源代码(假设您可以获得一个或使用 ILSpy 之类的东西进行反编译) - 正如 Servy(+1) 回答指出的那样,您描述了控件不需要使用的默认行为。
-
是的,我一直在搜索源代码,但还没有找到。我怀疑这确实是 NSButton 特有的东西,因为在 iOS 上连接到 UIButton 的 TouchUpInside 事件的几乎相同的代码可以正常工作。
-
在 Xamarin 的帮助下,我设法从 MonoMac 更新到 Xamarin.Mac。但是这种行为是一样的。仍然没有设法找到任何关于这是否是预期行为的官方消息或文档。
标签: c# events delegates mono monomac