【发布时间】:2010-12-19 13:36:42
【问题描述】:
从this post 开始 - 当我只希望触发一个处理程序事件时,使用-= 然后建议使用+= 方法有什么缺点?
_value.PropertyChanged -= _handlerMethod;
_value.PropertyChanged += _handlerMethod;
【问题讨论】:
标签: c# event-handling
从this post 开始 - 当我只希望触发一个处理程序事件时,使用-= 然后建议使用+= 方法有什么缺点?
_value.PropertyChanged -= _handlerMethod;
_value.PropertyChanged += _handlerMethod;
【问题讨论】:
标签: c# event-handling
这并不能保证只触发一个处理程序。
另一个位置可能会多次为您的处理程序订阅您的事件。在这种情况下,您只会删除第一个处理程序调用。
如果您确实希望一次只订阅一个处理程序,则通过检查事件的调用列表,您可以保证这种行为。
【讨论】:
如果您真的只希望执行一个处理程序,那么您可能希望使用适当委托类型的可设置属性而不是事件。仅存储一名代表;您可以像执行事件处理程序一样执行委托。
【讨论】:
这里的想法是,如果您的事件处理程序未分配,-= 运算符将不会做任何事情。
我个人不喜欢这种方法,我认为您应该真正致力于重构您的代码,以便您知道事件处理程序只分配一次。
缺点是: - 竞争条件的可能性,如果您的应用程序是多线程的并且在未分配处理程序时触发事件 - 我也不确定当你运行 _value.PropertyChanged -= _handlerMethod 当处理程序的两个副本已经分配时会发生什么。 - 乱七八糟的代码 - 显然从代码中不清楚哪个类以及何时监听事件
【讨论】: