c# - 只有一个 C# 事件处理程序被调用

标签 c# events delegates mono monomac

我(不可否认)的理解是,您应该能够向 C# 事件添加任意数量的委托(delegate),并且它们都会被调用(以某种未定义的顺序)。但在我的项目中似乎并非如此。我把它归结为两个委托(delegate)添加到 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!”但我没有看到“Handler 2?”出现在控制台中。如果我注释掉添加处理程序 1 的行,则处理程序 2 会触发。

它的行为就好像只有第一个添加的委托(delegate)起作用,任何后续的都被忽略。但这违背了我能找到的关于 C# 中的事件应该如何工作的所有信息。我做错了什么?

最佳答案

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

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

关于c# - 只有一个 C# 事件处理程序被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432550/

相关文章:

objective-c - 在 dealloc 中将委托(delegate)设置为 nil

c# - 具有回调的委托(delegate)的内存泄漏

c# - 注册来自不同类的回调

c# - C# .net 3.5 中的问题/惊喜

c# - 使用 LINQ 获取一个 List<> 中的项目,这些项目位于另一个 List<> 中

c# - .NET MAUI VISUAL STUDIOS 2022 如何让状态栏全透明

jquery - 使用 jQuery 触发多个动画 onScroll 事件

c# - 新的WPF项目将无法编译-抛出错误 “The name ' InitializeComponent'在当前上下文中不存在”

javascript - 如何在 Angular 2 中设置事件目标的样式?

php - Laravel 5 事件处理程序未触发