ich ein Ereignis haben, wie folgt:Entfernen eines Delegaten von einem Ereignis
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
Hier einige Code ist ein Delegierter aus dem obigen Fall zu entfernen, die ich gearbeitet habe:
public void RemoveDelegate(Delegate del)
{
RaiseCustomEvent -= (EventHandler<CustomEventArgs>)del;
}
Hier einige ist Code, den ich geschrieben habe, einen Delegierten zu entfernen, wo ich den Ereignisnamen kennen:
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;
}
In dem obigen Code, der fieldValue
wird auf null gesetzt, wenn jedoch das Ereignis ausgelöst wird, gibt es immer noch einen Abonnenten.
Kann ich bitte etwas Hilfe haben, um einen Delegaten von einem Ereignis zu entfernen, wo ich nur den Ereignisnamen habe?
wenn sich 'fieldValue' auf null gesetzt? Wann ist es zugewiesen oder wenn "del" abgemeldet ist? – nozzleman
Wenn del abgemeldet ist. – user3736648