我的活动如下:
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
以下是一些代码,用于从我上面的事件中删除委托:
public void RemoveDelegate(Delegate del)
{
RaiseCustomEvent -= (EventHandler<CustomEventArgs>)del;
}
以下是我编写的一些代码,用于删除我知道事件名称的委托:
public void RemoveRaiseCustomEventDelegate(Delegate del, string eventName)
{
var field = this.GetType().GetField(eventName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField);
var fieldValue = field.GetValue(this) as EventHandler<CustomEventArgs>;
fieldValue -= (EventHandler<CustomEventArgs>)del;
}
在上面的代码中,fieldValue
设置为null,但是,当引发事件时,仍然有订阅者。
我可以请一些帮助从活动中删除一名代表,我只有活动名称吗?
答案 0 :(得分:1)
public void RemoveRaiseCustomEventDelegate(Delegate del, string eventName)
{
this.GetType()
.GetEvent(eventName)
.RemoveEventHandler(this, del);
}
上的MSDN
上的MSDN
答案 1 :(得分:0)
我认为RaiseCustomEvent
中找不到RemoveRaiseCustomEventDelegate
。它被声明为public
,您正在过滤BindingFlags.NonPublic
。
因此
var fieldValue = field.GetValue(this) as EventHandler<CustomEventArgs>;
应该失败。也许RemoveRaiseCustomEventDelegate
位于catch
- 阻止?