Zusammengesetzte WPF -Eventaggregator -Abonnements gehen verloren
-
16-09-2019 - |
Frage
In meiner zusammengesetzten WPF-Anwendung habe ich ein Ereignis, das veröffentlicht wird, wenn der Benutzer auf eine Kontrolle doppelklickt. Module abonnieren das Ereignis und führen bei Bedarf eine Aktion aus.
Dieses Ereignis scheint zufällig aufzuhören. Manchmal kann ich, wenn ich die Anwendung ausführe, das Ereignis ohne Probleme auslösen. Manchmal kann ich es nur einige Male auslösen, bevor die Module das Ereignis aufhören.
Wenn ich im Debugger schaue, der Cal EventAggregator
hat immer noch die Veranstaltung, aber die Veranstaltung hat keine Abonnements. Wie kann EventAggregator
Abonnements verlieren?
Lösung
Es stellte sich heraus, dass es der Müllsammler war, der die Abonnements entfernt hat. Ich muss mich über die Interna nachlesen, aber als ich ersetzt habe
this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(SomeFunction);
mit
this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(
SomeFunction, ThreadOption.UIThread, true);
Es fing an zu arbeiten. Die UI -Thread -Parameter waren nicht mein Problem, aber für andere kann es wichtig sein, sicherzustellen, dass Sie das Ereignis auch auf dem richtigen Thread abwickeln.