Ich habe ein benutzerdefiniertes WPF-Benutzersteuerelement erstellt, das von Dritten verwendet werden soll. Meine Kontrolle hat ein privates Mitglied, das wegwerfbar ist, und ich möchte sicherstellen, dass seine Entsorgungsmethode immer aufgerufen wird, sobald das enthaltende Fenster/die Anwendung geschlossen wird. UserControl ist jedoch nicht verfügbar. Ich habe versucht, die IDisposable-Schnittstelle zu implementieren und das Unloaded-Ereignis zu abonnieren, aber beide werden nicht aufgerufen, wenn die Host-Anwendung geschlossen wird. Wenn es möglich ist, möchte ich mich nicht darauf verlassen, dass die Konsumenten meiner Kontrolle sich erinnern, eine bestimmte Dispose-Methode aufzurufen.WPF-Benutzersteuerelemente verteilen
Die einzige Lösung, die ich bisher gefunden habe, ist das ShutdownStarted-Ereignis des Dispatchers zu abonnieren. Ist das ein vernünftiger Ansatz?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
Was ist mit der Unloaded Fall Benutzerkontrolle? – akjoshi
@akjoshi: MSDN sagt Folgendes: Das entladene Ereignis wird möglicherweise überhaupt nicht ausgelöst.Und es kann auch mehr als einmal ausgelöst werden, wenn der Benutzer das Thema wechselt. – Dudu
Während Sie die IDisposable-Schnittstelle in Ihrem Benutzersteuerelement implementieren können, gibt es keine Garantie dafür, dass Ihre Drittpartei die dispose-Methode Ihrer Dispose-Musterimplementierung aufrufen wird. Wenn Sie an nativen Ressourcen festhalten (z. B. einen Dateistream), sollten Sie einen Finalizer verwenden. – Philippe