如果我使用eventHandler订阅同一事件三次,是否有问题?
例如

a.SomethingChanged += new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);

这会导致ChangeHandler被调用3次而不是1次吗?处理此问题的最佳方法是什么?

请注意,这些冗余不是在一起,而是代码路径的不同区域。

类似地,取消订阅未注册的事件是否存在问题?
例如
a.SomethingChanged -= new EventHandler(ChangeHandler);  //ChangeHandler was never registered

最佳答案

如果您订阅一个事件不止一次,那么您的处理程序将被调用相应的次数-在您的示例中为三。

这是否是一个问题取决于事件处理程序的功能,但是我假设您不希望多次调用它。

取消订阅尚未订阅的事件没有问题。

因此,如果不确定应用程序处于什么状态(尽管确实应该如此),则可以拥有:

a.SomethingChanged -= ChangeHandler;
...
a.SomethingChanged += ChangeHandler;

(注意:new EventHandler(...)是语法糖,可以省略)

10-06 13:30