从this post开始 - 当我只想要触发一个处理程序事件时,使用-=
然后+=
方法时有什么不利之处?
_value.PropertyChanged -= _handlerMethod;
_value.PropertyChanged += _handlerMethod;
答案 0 :(得分:4)
这并不能保证只触发一个处理程序。
另一个位置可能会多次为您的事件订阅您的处理程序。在这种情况下,您只会删除第一个处理程序调用。
通过检查事件的调用列表,您可以保证这种行为,如果您真的只想要一次订阅一个处理程序。
答案 1 :(得分:2)
如果您确实只想要执行一个处理程序,那么您可能希望使用适当委托类型的可设置属性而不是事件。只存储一名代表;你可以像处理事件处理程序那样执行委托。
答案 2 :(得分:1)
这里的想法是,如果没有分配事件处理程序, - =运算符将不会执行任何操作。
我个人并不喜欢这种方法,我认为你的目标应该是重构代码,以便知道事件处理程序只被分配一次。
缺点是: - 竞争条件的可能性,如果您的应用程序是多线程的,并且在未分配处理程序时触发事件 - 我也不确定当你已经分配了两个处理程序副本时运行_value.PropertyChanged - = _handlerMethod会发生什么。 - 凌乱的代码 - 显然从代码中清楚地看出哪个类以及何时正在监听事件