2017-07-20 3 views
0

Ich habe WebBrowser Kontrolle in meine UserControl. Diese UserControl zeigt abhängig von DataTemplateSelector Regeln. So wird es nacheinander angezeigt und ausgeblendet. (Stellen Sie sich vor, ich habe die Liste der Kundenbestellungen und klicke auf Listenelement Ich lade UserControl in ContentPresenter.) Aufgrund vieler Probleme mit memleaks von WebBrowser wird empfohlen, es zu entsorgen. Also rufe ich auf diese Weise.Richtiger Weg, um wpf Kontrolle in nachladbarer Elternkontrolle zu verlieren

private void UserControl_Unloaded(object sender, RoutedEventArgs e) 
{ 
    WebBrowser.Dispose(); 
} 

Aber ich merkte, dass, wenn in der Regel stacktrace Ctor ist, geladen, entladen, aber manchmal wpf Motor der Usercontrol Aufruf Ctor nicht neu, aber es aus dem Cache (wenn ich mich richtig undestand) und so bekomme ich angeordnet Browser UserControl als unloaded Methode dispases es.

Wie kann ich ein Einwegsteuerelement entsorgen, das in redispayable UserControl eingebettet ist?

+0

Wie ich verstanden habe, ist dein Problem nicht, ein WebBrowser-Control zu entsorgen, aber wenn usercontrol wiederverwendet wird, ist das WebBrowser-Control entsorgt, habe ich recht? – Rekshino

+0

Nicht genau. Ich muss den WebBrowser speichern, aber ja, wenn usercontrol wiederverwendet wird, wird das WebBrowser-Control entsorgt. Und ich möchte sicherstellen, dass ich WebBrowser entsorg, wenn UserControl nie wieder verwendet wird. Kann entladen sein, nicht am besten –

Antwort

0

Sie könnten eine neue WebBrowser Steuerungsinstanz im Loaded Ereignisse Ihrer Usercontrol erstellen und es in den Unloaded Ereignishandler verfügen, dh anstelle der Definition das Steuer in Ihrem XAML-Markup Sie es in dem Code-Behind der gleichen erstellen Ansicht,

+0

Oder es könnte möglich sein, Erstellung/Entsorgung an VisibilityChanged anzuhängen. – Rekshino

+0

danke, ich dachte über diesen Weg –

+0

Und ...? Warum implementierst du es nicht? – mm8

Verwandte Themen