我有一个事件如下:
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
下面是一些代码,用于从我正在处理的上述事件中删除委托(delegate):
public void RemoveDelegate(Delegate del)
{
RaiseCustomEvent -= (EventHandler<CustomEventArgs>)del;
}
这是我编写的一些代码,用于删除我知道事件名称的委托(delegate):
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,但是,当事件被引发时,仍然有一个订阅者。
如果我只有事件名称,能否从事件中删除委托(delegate)?
最佳答案
public void RemoveRaiseCustomEventDelegate(Delegate del, string eventName)
{
this.GetType()
.GetEvent(eventName)
.RemoveEventHandler(this, del);
}
MSDN GetEvent
关于c# - 从事件中删除委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047186/