Lösung, um Event-Handler dynamisch zu entfernen (mithilfe von Reflektion). Gibt es einen besseren Weg, dies zu tun?

Ich musste Event-Handler aus einem Steuerelement entfernen, das aus einer DLL geladen wurde, für die ich nicht den Code habe. Da es anscheinend keine 'offiziellen' (d. H. Von öffentlichen Methoden des .NET Frameworks unterstützten) gibt, konnte ich mithilfe von Reflection einige Erweiterungsmethoden erstellen, die genau das taten.

In diesem Blogbeitrag finden Sie alle Details:Entfernen eines Ereignisses aus einem WinForm ListView-Steuerelement mithilfe von Reflektion

Im Folgenden finden Sie ein Codebeispiel zum Entfernen des SelectedIndexChanged-Ereignisses (dynamisch und ohne Zugriff auf den ursprünglichen Handler).

//for a UserControl (in fact any control that implements System.ComponentModel.Component)
var userControl = new UserControl();
//we can get the current mapped event handlers
userControl.eventHandlers();
//its signature
userControl.eventHandlers_MethodSignatures();
//remove one by using the static field name
userControl.remove_EventHandler("EVENT_SELECTEDINDEXCHANGED");
//or use this one specifically mapped to the SelectedIndexChanged event
userControl.remove_Event_SelectedIndexChanged

Meine Frage ist: "Gibt es einen anderen Weg?"

Obwohl meine Lösung funktioniert und stabil zu sein scheint, bearbeite ich interne .NET-Objekte. Vielleicht gibt es eine bessere Lösung (in 4.0 oder 4.5)?

Zusammenhängende Posts:

Wie wäre es möglich, alle Event-Handler des Click-Ereignisses eines Buttons zu entfernen? - verwendet eine ähnliche Lösung wie ich, aber ich denke nicht, dass ihre Lösung funktioniert

Antworten auf die Frage(0)

Ihre Antwort auf die Frage