C# 我是否应该防止一个事件被取消挂钩两次

本文关键字:事件 取消 两次 一个 是否 | 更新日期: 2023-09-27 18:34:41

如果一个事件被钩住并且稍后在应用程序中被解开,那么我尝试再次解绑它。
我应该防止这种情况吗?

private void MyFunctionCalledWheneverIWant()
{
    // Second unhook : Should I prevent this ? How ?
    myObject.MyEventHandler -= MyEvent;
}
public void MyEvent()
{
    // First unhook
    myObject.MyEventHandler -= MyEvent;
}

C# 我是否应该防止一个事件被取消挂钩两次

取消订阅两次不会像@puneet和@MaartenVanSambeek指出的那样导致问题。如果要添加检查,可以通过 GetInvocationList 执行此操作,并浏览列表以验证您是否具有订阅。如果是这样,请取消订阅。

if(MyEventHandler!=null)
{
    foreach ( Delegate existingHandler in  MyEventHandler.GetInvocationList())
    {
        if ( existingHandler == MyEvent)
        {
            myObject.MyEventHandler -= MyEvent;
            return;
        }
    }
}

分离事件处理程序两次不是问题,如果事件只附加一次,则第二次分离将不执行任何操作。