Ich habe ein Mitglied im WPF-Code dahinter, der wegwerfbar ist (dh er implementiert die IDisposable-Schnittstelle)
Ich sehe keine Dispose-Methode, die ich von UserControl in WPF überschreiben kann, damit ich das Mitglied in meinem wpf-Benutzersteuerelement entsorgen kann
Was ist der richtige Weg, um ein Mitglied in einer WPF-Benutzersteuerung zu entsorgen?
Es ist ein Benutzersteuerelement, das ein privates Mitglied umschließt, das die IDisposable-Schnittstelle implementiert. Daher muss ich dieses Mitglied irgendwo entsorgen. In der Tradition winform hatte die usercontrol eine Dispose-Methode, die überschrieben werden konnte, so dass ich in der Überschreibung das private Mitglied entsorgen konnte. Aber in der WPF-Benutzersteuerung gibt es so etwas nicht. Also habe ich mich gefragt, wo kann ich das private Mitglied in der wpf usercontrol entsorgen.
Bei meiner Frage geht es nicht darum, das usercontrol zu disponieren, sondern um eines seiner privaten Mitglieder zu entsorgen, die die IDisposable-Schnittstelle implementieren
Sie würden dies im Dispatcher.ShutDownStarted-Ereignishandler tun. Einzelheiten hierzu finden Sie (die sich wiederum auf dieser Blogpost ).
AKTUALISIEREN
Wenn Sie in Ihr privates Mitglied anrufen, das IDisposable implementiert, können Sie using
verwenden? Auf diese Weise wird es automatisch entsorgt. Ich habe es nicht persönlich in einem UserControl getan, aber es könnte den Trick machen. z.B.
alte Antwort
Wenn Sie Dispose () nicht aufrufen können, besteht das Problem darin, dass Ihr Benutzersteuerelement nicht von Disposable () erbt. UserControl selbst wird nicht davon abgeleitet, also müssen Sie explizit Ihr WPF-Steuerelement davon erben, d. H.
%Vor%Siehe die UserControl-Basistypen hier:
Sobald Sie IDisposable implementiert haben, können Sie es aufrufen. Aber wie ich in meinem Kommentar zu Ihrer Frage geschrieben habe, denke ich, dass Sie mehr Informationen über diese Klasse veröffentlichen müssen. Fragen Sie sich, ob Sie Dispose () wirklich aufrufen müssen ... d. H. Behandelt Ihr UserControl-Zugriff oder verwendet nicht verwalteten Code? Wenn nicht, sehe ich nicht, warum Sie Dispose () aufrufen müssen, es sei denn, Sie wollten wirklich, dass der GC es aufräumt.