只调用了一个C#事件处理程序

时间:2014-05-02 16:13:21

标签: c# events delegates mono monomac

我的(不可否认的是)摇摇欲坠的理解是你应该能够在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?");
};

(当然,此按钮会添加到窗口中)。当我点击它时,我看到" Handler 1!"但我没有看到" Handler 2?"出现在控制台中。如果我注释掉添加处理程序1的行,则处理程序2将触发。

它的行为就像只添加了第一个委托一样,并且忽略了任何后续委托。但这违背了我可以找到的关于C#中的事件应该如何工作的一切。我做错了什么?

2 个答案:

答案 0 :(得分:1)

值得注意的是,您已经描述了应该的行为,而不是必须的行为方式。定义事件的类型可以在需要时忽略这些准则,而不是保留多个处理程序。这不是几乎所有事件你都会看到的行为,因为他们不得不竭尽全力来产生这种行为。

答案 1 :(得分:1)

这实际上是一个错误。我在这里提交了:

https://bugzilla.xamarin.com/show_bug.cgi?id=19619