如果一个事件被钩住并且稍后在应用程序中被取消,那么我会尝试再次取消它。
我应该阻止这个吗?
private void MyFunctionCalledWheneverIWant()
{
// Second unhook : Should I prevent this ? How ?
myObject.MyEventHandler -= MyEvent;
}
public void MyEvent()
{
// First unhook
myObject.MyEventHandler -= MyEvent;
}
答案 0 :(得分:4)
分离事件处理程序两次并不是问题,如果事件只附加一次,则第二次分离将不执行任何操作。
答案 1 :(得分:3)
取消订阅不会导致问题,因为@puneet和@MaartenVanSambeek指出。如果要添加检查,可以通过GetInvocationList执行此操作,并浏览列表以验证您是否拥有订阅。如果是这样取消订阅。
if(MyEventHandler!=null)
{
foreach ( Delegate existingHandler in MyEventHandler.GetInvocationList())
{
if ( existingHandler == MyEvent)
{
myObject.MyEventHandler -= MyEvent;
return;
}
}
}