Reihenfolge von Events

  • VB.NET
  • .NET 5–6

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

    Reihenfolge von Events

    Hallo,

    ich habe zwei Instanzen mit einem Eventhandler. Beide teilen sich ein Event, dass sie behandeln.
    • Event1 wird ausgelöst,
    • Instanz1 behandelt Event1,
    • Instanz2 behandelt Event1.

    Wenn jetzt Instanz1 in dem Eventhandler aber auch ein Event auslöst, dann schiebt sich die Bearbeitung davon dazwischen.
    • Event1 wird ausgelöst,
    • Instanz1 behandelt Event1 und löst Event2 aus,
    • Event2 wird irgendwo behandelt
    • Instanz2 behandelt Event1.
    Das finde ich etwas komisch, kann man das irgendwie lösen, dass die Events in der Auslösereihenfolge bleiben?
    Ich schätze das hat etwas mit der Eventhierarchie zu tun und deswegen geht das nicht anders.

    Ich habe das jetzt erstmal so gemacht, dass nicht der Eventhandler das Event auslöst, sondern einen Timer startet und der dann das Event versetzt auslöst.
    Aber das halte ich für keine Universallösung, zumal das ne Katastrophe beim Debuggen ist, die ich nicht zu verstehen in der Lage bin.

    Viele Grüße
    @Haudruferzappeltnoch Events sind nicht dafür gemacht, synchronisiert zu werden.
    Wenn Du abläufe synchronisieren willst / musst, musst Du mit Mechanismen arbeiten, die genau das tun.
    Gugst Du
    learn.microsoft.com/de-de/dotn…ynchronization-primitives
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Haudruferzappeltnoch schrieb:

    Das finde ich etwas komisch, kann man das irgendwie lösen, dass die Events in der Auslösereihenfolge bleiben?
    Wieso? Ein Event auslösen heißt ja nur: Ich sag bei allen Interessenten bescheid, dass was passiert ist. Und das ist nix anderes als: Ich rufe die Methode auf, die mir der Interessent genannt hat. Also effektiv:
    Event1 wird ausgelöst: Sender ruft Empfänger-Methode von Instanz1 auf.
    In dieser Methode wird Event2 ausgelöst: Instanz1 ruft also Empfänger-Methode von der weiteren Stelle auf.
    Wenn das fertig ist, wird dann noch die Empfänger-Methode von Instanz aufgerufen.

    Also kein Hexenwerk, sondern logischer Nacheinander-Ablauf.
    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.
    Ich hab es so nur noch nie betrachtet. Das würde ja auch bedeuten wenn ich Events im Kreis schalte, sperre ich alle anderen Eventhandler aus oder sogar jegliche andere Codeausführung. Habe ich aber nicht getestet.
    Die Konzepte die RFG vorschlägt mag ich mir aber gerne einmal zu Gemüte führen, es kann gut sein, dass das eigentlich ist, was ich suche.

    Haudruferzappeltnoch schrieb:

    Das würde ja auch bedeuten wenn ich Events im Kreis schalte
    (Was ist damit wohl gemeint?)
    Jedenfalls, wenn zwei Objekte je ein Event je des anderen behandeln, und dabei je ihr eigenes auslösen, dann ist eine StackOverflowException fällig.
    Im CallStack (Aufrufeliste) kannst du dann irrsinnig viele Methoden sehen, die einander aufrufen - halt bis der Stack überläuft (overflow)