使用 GetInvocationList 取消订阅事件处理程序

本文关键字:事件处理 程序 GetInvocationList 取消 使用 | 更新日期: 2023-09-27 18:36:54

我的基类中有一些事件,我想将以下模式应用于 IDisposable 或终结器中。

var onCategorizedMessage = this.OnCategorizedMessage.GetInvocationList().ToList();
foreach (var item in onCategorizedMessage)
    this.OnCategorizedMessage -= item;

我会为每个事件重复一次此代码。

这是处理取消订阅事件以防止内存泄漏的合理且可靠的方法吗?

使用 GetInvocationList 取消订阅事件处理程序

无需使用 forforeach 来执行此操作,因为您可以访问支持字段(存储委托),您只需要这样做:

this.OnCategorizedMessage = null;

有关更多信息,您可以在此处查看:http://www.codeproject.com/Articles/864690/Simplifying-Events-in-NET