如果一个事件被钩住,后来在应用程序中被取消钩住,那么我会尝试再次将其解钩。
我应该防止这种情况吗?

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

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

最佳答案

如@puneet和@MaartenVanSambeek所述,两次退订不会导致问题。如果要添加支票,可以通过GetInvocationList进行检查,并遍历列表以验证您是否具有订阅。如果是这样,请退订。

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

关于C#是否应该阻止将事件取消 Hook 两次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35407570/

10-11 15:30