Event wird mehrfach ausgelöst

  • C#

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von TRiViUM.

    Event wird mehrfach ausgelöst

    Guten Morgen liebe Community,

    ich habe ein mir noch nicht ganz so erklärbares Verhalten meiner Anwendung festgestellt und möchte mal in die Runde fragen, ob ich mit meiner Vermutung auf dem Holzweg bin, oder ob das so Sinn macht:

    Ich habe folgendes Phänomen:
    Eine Form hat ein Event einer eigenen Klasse abonniert.
    Wenn ich die Form zum ersten mal öffne, kommt auch nur 1x das Event.
    Wenn ich die Form schließe und das zweite mal öffne, kommt das Event 2x usw.

    Das Custom-Event:

    C#-Quellcode

    1. internal delegate void FilesDownloadedHandler(object sender);
    2. internal event FilesDownloadedHandler FilesDownloaded;
    3. private void FireFilesDownloaded()
    4. {
    5. FilesDownloadedHandler handler = FilesDownloaded;
    6. if (handler != null)
    7. {
    8. handler( this );
    9. }
    10. }


    Die Form abonniert das Event im Constructor.
    Werden Event-Handler, die eine Form abonniert hat, beim zerstören der Form nicht wieder de-abonniert?

    Habt Ihr eine Ahnung, was da passieren könnte? ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TRiViUM“ ()

    Nö, wird es nicht automatisch. So wie Du es mit += abonniert hast, Musst Du mit -= bei Schließen (oder anderen geeigneten Zeitpunkt) deabonnieren.
    Allerdings frag ich mich gerade: Wie sieht der Konstruktor aus? Welche Prozedur wird bei Eventauslösung aufgerufen? Kann ja keine Form-eigene sein, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Nö, wird es nicht automatisch

    Tatsächlich...hab jetzt im FormClosed-Event das Event deabonniert und jetzt funktioniert es wie gewünscht.

    Ist mir bislang so noch nie aufgefallen, denn ich musste bislang noch nie aktiv deabonnieren :huh:

    VaporiZed schrieb:

    Wie sieht der Konstruktor aus?

    Der ist quasi leer, bis auf das abonnieren:

    C#-Quellcode

    1. global.Manager.FilesDownloaded += Manager_FilesDownloaded;


    Demnach haste schon richtig vermutet, kein formeigenes Event.

    @VB1963
    Jau, ich sollte mir angewöhnen, viel mehr in der MSDN nachzulesen...

    @Schmittmuthelm
    In der Tat ein interessanter Ansatz, den ich mir mal versuche anzueignen :thumbup:

    Danke! :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TRiViUM“ ()