Überprüfen, ob Ereignishandler existieren



  • In C# kann oder muss man überprüfen, ob bei Aufruf eines Ereignises Handler registriert sind.

    In C++/CLI ist das nicht der Fall. Wenn man ein Event auf nullptr überprüft, bekommt man einen Compiler Fehler.

    Ich möchte aber beim Aufruf wissen, ob Handler registriert sind und wenn ja, wieviele es sind. Wie kann ich das in C++/CLI machen?



  • Wenn Du in C++/CLI einen Event definierst, hast Du vermutlich die "Kurzform" verwendet... es gibt auch eine "Langform", dann hast Du über alles Kontroll! 😉

    http://forums.msdn.microsoft.com/en/vcgeneral/thread/75a1d121-ea37-4e57-9fe7-204bcde86b20/

    Siehe auch: event
    http://msdn.microsoft.com/zh-tw/library/4b612y2s.aspx

    Beispiel der ausführlichen Version:
    http://msdn.microsoft.com/zh-tw/library/5f3csfsa.aspx



  • Warum brauchst Du die Info?

    Wenn man eine InvocationList braucht dann handelt es sich für mich nicht um einen event --> also event keyword wegnehmen . Dann kannst du auf nullptr prüfen und ein GetInvocationList()->Length aufrufen.



  • Warum brauchst Du die Info?

    Weil ich unterschiedliche Dinge machen muss, je nachdem ob ein Eventhandler registriert ist oder nicht.

    Wenn man eine InvocationList braucht dann handelt es sich für mich nicht um einen event --> also event keyword wegnehmen . Dann kannst du auf nullptr prüfen und ein GetInvocationList()->Length aufrufen.

    Dann kann ich mich aber nicht mehr von Außen für das Event registrieren. Ich bräuchte ein Property, mit dem ich zusätzliche EventHandler dazunehmen kann. Das ist nicht mehr so elegant.

    Die Lösung hat Jochen gepostet. 👍 Sieht bei mir in Kurzform so aus:

    event MailboxReceiveEvent ^OnDataReceived
    	{
    		void add(MailboxReceiveEvent ^e);
    		void remove(MailboxReceiveEvent ^e);
    		void raise(T kMailData);
    	}
    

    Bei der Implementierung der Methoden kann man dann die EventHandler in Listen speichern und abfragen.


Anmelden zum Antworten