Ordnungsgemäße Bereinigung von WPF-Benutzersteuerelementen

Ich bin relativ neu in WPF, und einige Dinge sind sehr Fremd für mich. Für einen, im Gegensatz zu Windows Forms -, WPF-Steuerelement-Hierarchie nicht unterstützt IDisposable. In Windows Forms, wenn ein Benutzer-Steuerelement verwalteten Ressourcen, es war sehr leicht zu reinigen, die Ressourcen, die durch das überschreiben der Dispose-Methode, die jedes Steuerelement implementiert.

In WPF, die Geschichte ist nicht so einfach. Ich habe gesucht für mehrere Stunden, und traf auf zwei grundlegende Themen:

Das erste Thema ist Microsoft deutlich, die besagt, dass WPF nicht implementiert IDisposable, da die WPF-Steuerelemente haben keine nicht verwaltete Ressourcen. Während das mag wahr sein, offensichtlich haben Sie völlig übersehen die Tatsache, dass Benutzer-Erweiterungen, um Ihre WPF-Klassenhierarchie kann in der Tat die Verwendung von verwalteten Ressourcen (direkt oder indirekt über ein Modell). Von nicht der IDisposable implementiert, Microsoft hat wirksam entfernt werden die einzige Garantie-Mechanismus, mit dem nicht verwalteten Ressourcen verwendet, die von einem benutzerdefinierten WPF-Steuerelement oder ein Fenster bereinigt werden können.

Zweiten, fand ich ein paar Hinweise zum Disponenten.ShutdownStarted. Ich habe versucht, verwenden Sie die ShutdownStarted Ereignis, aber es scheint nicht, um das Feuer für jedes Steuerelement. Ich habe eine Reihe von WPF-Benutzersteuerelement, die ich umgesetzt haben, einen handler für ShutdownStarted, und es wird nie genannt. Ich bin nicht sicher, wenn es funktioniert nur für Windows, oder vielleicht ist die WPF-App Klasse. Es ist jedoch nicht richtig Schießen, und ich bin undicht öffnen PerformanceCounter Objekte jedes mal, wenn die app schließt.

Gibt es eine bessere alternative zum bereinigen nicht verwalteter Ressourcen als der Dispatcher.ShutdownStarted Veranstaltung? Gibt es irgendein trick, um der IDisposable implementiert, so dass Dispose aufgerufen wird? Ich würde viel lieber vermeiden mit einem finalizer, wenn überhaupt möglich.

InformationsquelleAutor der Frage jrista | 2009-10-11

Schreibe einen Kommentar