WPF-Steuerelement, das ein IDisposable-Member enthält

8

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

    
pdiddy 10.09.2010, 14:53
quelle

3 Antworten

2

Sie könnten das Unloaded-Ereignis von UserControl verwenden, um Ihre Ressourcen zu bereinigen.

    
MrDosu 10.09.2010, 15:16
quelle
1

Sie würden dies im Dispatcher.ShutDownStarted-Ereignishandler tun. Einzelheiten hierzu finden Sie (die sich wiederum auf dieser Blogpost ).

    
Mike Post 18.11.2010 22:28
quelle
0

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.

%Vor%

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.

    
Dave 10.09.2010 15:36
quelle

Tags und Links