我正在使用textchanged事件,我禁用它,我不需要如下
object.Event -= new System.EventHandler(myHandler);
//my code which doesn't need event handler
object.Event += new System.EventHandler(myHandler);
我经常使用这样的次数。但我有时需要2个禁用代码:
object.Event -= new System.EventHandler(myHandler);
object.Event -= new System.EventHandler(myHandler);
当然我用2启用代码
完成了它object.Event += new System.EventHandler(myHandler);
object.Event += new System.EventHandler(myHandler);
我不知道为什么我需要2次删除事件处理程序,但它工作得很好。
但在1例中我遇到了问题。
它不适用于2个或更多禁用代码。
我的问题是,如果它只需要一个 - =代码或更多,我怎么能看到这个事件处理程序? 或者我该如何管理呢? 我总是像这样工作,以确保我总是第一次离开事件处理程序
object.Event -= new System.EventHandler(myHandler);
//my code which doesn't need event handler
object.Event += new System.EventHandler(myHandler);
答案 0 :(得分:10)
我的建议是停止删除并重新添加事件处理程序,而是向事件处理程序本身添加一个标志,该标志禁止在这些代码段中需要禁止的任何活动。
您可以使用单个布尔标志,也可以使用某种引用计数,具体取决于您需要如何处理嵌套。
如果有一些原因导致您无法更改现有的事件处理程序,那么创建一个附加到Event的新事件处理程序,并从中调用旧事件呢?
答案 1 :(得分:4)
您需要在添加事件处理程序时多次删除它 - 而且您无法判断它是什么时候,因为订阅对您有效隐藏。
理想情况下,只需确保您只需要订阅多次,并且很明显您需要多少次取消订阅。通常这将是一次。你有两个订阅开始时有点奇怪...我怀疑这可能表明代码中的某个地方存在错误。
请注意,使用尚未订阅的事件处理程序取消订阅是无操作。
(Will知道事件处理程序本身知道它是否真的“活跃”也是一个好的,顺便说一句。)