Wie wird das Ansichtsmodell richtig aufgeräumt?

8

Ich habe ein Ansichtsmodell, das als Datenquelle für mein benutzerdefiniertes Steuerelement verwendet wird. Im Konstruktor des View-Modells habe ich ein WMI ManagementEventWatcher eingerichtet und starte es. Mein Ansichtsmodell implementiert IDisposable , also stoppe ich den Watcher in der Dispose-Methode.

Wenn ich das benutzerdefinierte Steuerelement in ein Fenster einbetten und dann das Fenster schließe, um die Anwendung zu beenden, wird ein InvalidComObjectException -Sprichwort "COM-Objekt, das von seinem zugrunde liegenden RCW getrennt wurde, kann nicht verwendet werden" ausgegeben. Dies geschieht wegen meines Beobachters, und wenn ich es nicht erstelle, gibt es keine Ausnahme. Es gibt keine zusätzlichen Informationen über die Ausnahme wie Stack-Trace usw.

Meine Vermutung ist, dass etwas das Ansichtsmodell behält, bis der Thread, den der Beobachter verwendet, endet, aber bevor der Beobachter gestoppt wird, und ich weiß nicht, wie ich damit umgehen soll.

Irgendwelche Tipps? Vielen Dank Konstantin

%Vor%     
akonsu 23.09.2010, 18:05
quelle

1 Antwort

4

Dieser Artikel hat die Lösung: WPF-Benutzersteuerelemente verteilen

Grundsätzlich scheint WPF IDisposable nirgendwo zu verwenden, daher muss sich die App explizit selbst bereinigen. In meinem Fall abonniere ich das Dispatcher.ShutdownStarted-Ereignis von meinem Steuerelement, das das Ansichtsmodell verwendet, das entfernt werden muss, und entsorgt den DataContext des Steuerelements aus dem Ereignishandler.

    
akonsu 24.09.2010, 14:29
quelle

Tags und Links