我有一个带有方法的类,Register
使用标准 aClass.SomeEvent += the_handler
订阅它包含的类上的许多事件.这个类还有一个 Unregister
使用 -=
取消订阅这些事件的方法.这工作得很好,但我们发现如果我们添加一个新事件来订阅它,很容易忘记在 Unregister
中包含取消订阅。 .这种维护事件订阅的手动方法被证明是脆弱的。
有没有办法维护一个可以迭代和动态取消订阅的订阅列表? (并可能在 Register
之后调用 Unregister
时迭代并重新订阅)。
一些细节:该类引用了其他 3 个类(目前,但不限于 3 个),这些类上的各种事件都是类型 EventHandler
或 EventHandler<T>
.
最佳答案
如何从 EventHandler.GetInvocationList()
获取调用列表,然后遍历并手动删除/注销它们?请注意,您只能从具有该事件处理程序的类访问 GetInvationList() 方法,因此您可能需要公开一个方法 UnregisterAll() 以确保它删除事件调用列表中的所有委托(delegate)
您还可以确保您的类继承 IDisposable
并使用 using(){ }
它将调用 Dispose 以清除所有订阅者
关于c# - 存储要取消订阅的事件处理程序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989889/