c# - 存储要取消订阅的事件处理程序列表

标签 c# events reflection

我有一个带有方法的类,Register使用标准 aClass.SomeEvent += the_handler 订阅它包含的类上的许多事件.这个类还有一个 Unregister使用 -= 取消订阅这些事件的方法.这工作得很好,但我们发现如果我们添加一个新事件来订阅它,很容易忘记在 Unregister 中包含取消订阅。 .这种维护事件订阅的手动方法被证明是脆弱的。

有没有办法维护一个可以迭代和动态取消订阅的订阅列表? (并可能在 Register 之后调用 Unregister 时迭代并重新订阅)。

一些细节:该类引用了其他 3 个类(目前,但不限于 3 个),这些类上的各种事件都是类型 EventHandlerEventHandler<T> .

最佳答案

如何从 EventHandler.GetInvocationList() 获取调用列表,然后遍历并手动删除/注销它们?请注意,您只能从具有该事件处理程序的类访问 GetInvationList() 方法,因此您可能需要公开一个方法 UnregisterAll() 以确保它删除事件调用列表中的所有委托(delegate)

您还可以确保您的类继承 IDisposable 并使用 using(){ } 它将调用 Dispose 以清除所有订阅者

关于c# - 存储要取消订阅的事件处理程序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989889/

相关文章:

JavaScript 回调范围

android - 打开时更改 Spinner 内容

javascript - 如何从 JavaScript 文件中获取方法名称

Java反射权限错误

c# - Microsoft.Azure.KeyVault.Models.KeyVaultErrorException : 'Access denied to first party service.'

c# - 连接到连接到服务器的生物识别设备

Android覆盖布局在所有接收触摸的窗口之上

c# - 是否可以在 Grpc.Core 中接受自签名证书?

c# - 导入 .p12 文件中包含的所有证书

java - 显示对象属性的最佳方式