事件退订

本文关键字:事件 | 更新日期: 2023-09-27 18:04:06

我需要取消订阅我的事件上订阅的所有委托。但是我找到了两种方法……

class Cls
{
    delegate void doDel();
    static event doDel doE;
    void Uns
    {
    //first
    foreach (doDel item in doE.GetInvocationList())
    {
        doE -= item;
    }
    //second
       doE = null;
    }
}

有什么区别?哪种方式是最好的,为什么?

事件退订

第一种方法非常正确。如MSDN所述:

  • 使用减法赋值操作符(-=)来取消订阅事件:

    出版商。RaiseCustomEvent -= HandleCustomEvent;

当所有订阅者都取消订阅某个事件时,该事件实例设置为null。