Add und Remove Handler



  • Ich arbeite an einer AddOn Schnittstelle und kann deshalb keine Funktionen definieren. Ich kann nur .net Source Code ergänzen der dann eingefügt wird. Ich möchte nun ein paar EventHandler definieren, wegen obiger Einschränkung habe ich inline Delegates genommen. Das klappt soweit, jedoch weiß ich nicht genau wie das Remove von statten gehen soll, weil der Delegate ja weg ist bzw neu erstellt werden würde. Kann es zu Instabilitäten kommen wenn ich zu einem Fenster einen gleichen Delegaten auf das selbe ControlEvent immer und immer wieder registriere?

    // Vorher den Delegaten entfernen, falls er von einem anderen Funktionsaufruf bereits registriert wurde:
    MnuItemAdd.RemoveHandler(????);
    MnuItemAdd.AddHandler_Click( delegate(SDKXXX.GUI.EventHandling.MenuEvents.MenuClick beforeEvent) {
    		MessageBox.Show("funktioniert", "Ok");
    		}
    );
    


  • Probiere mal

    var handler = delegate(SDKXXX.GUI.EventHandling.MenuEvents.MenuClick beforeEvent) {
            MessageBox.Show("funktioniert", "Ok");
            }
    
    MnuItemAdd.RemoveHandler_Click(handler);
    MnuItemAdd.AddHandler_Click(handler);
    

    PS: Mit Lamda-Ausdrücken geht es noch kürzer:

    var handler = e => MessageBox.Show("funktioniert", "Ok");
    ...
    


  • Bei jedem Aufruf der Zeile "var handler = delegate..." würde doch handler einen Zeiger auf eine neue Funktion enthalten. Laut Fehlermeldung kann ich Delagate nicht in var abspeichern, man müsste die Delagate Definition wieder verwenden.

    Ich arbeite jetzt mit MnuItemAdd.RemoveAllHandlers();


Log in to reply