C#我应该阻止一个事件被解除两次吗?

时间:2016-02-15 10:58:17

标签: c# .net events delegates

如果一个事件被钩住并且稍后在应用程序中被取消,那么我会尝试再次取消它。
我应该阻止这个吗?

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

public void MyEvent()
{
    // First unhook
    myObject.MyEventHandler -= MyEvent;
}

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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