Windows Phone 8:Die Benutzersteuerung kann nicht entsorgt werden, wenn sie aus dem übergeordneten Bereich entfernt wurde?
-
20-12-2019 - |
Frage
Ich habe eine einfache Anwendungsseite mit einem Inhaltsbereich und füge im Inhaltsbereich ein Benutzersteuerelement hinzu.Wenn ich auf eine Schaltfläche klicke, um sie zu entfernen, wurde der Destruktor des userControl nicht ausgeführt.Warum?
Hier ist meine Hauptseite:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Content="AddOrRemove" Click="Button_Click"/>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
</Grid>
</Grid>
Das Button-Click-Ereignis ist:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (this.ContentPanel.Children.Count > 0)
{
this.ContentPanel.Children.Clear();
return;
}
page = new PromptPage();
this.ContentPanel.Children.Add(page);
}
PromptPage.xaml:
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}">
<StackPanel>
<TextBlock Text="balabalaabcdefghijklmnop1"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop2"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop3"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop4"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop5"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop6"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop7"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop8"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop9"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop10"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop11"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop12"></TextBlock>
<TextBlock Text="balabalaabcdefghijklmnop13"></TextBlock>
</StackPanel>
</Grid>
PromptPage.xaml.cs:
public PromptPage()
{
InitializeComponent();
}
~PromptPage()
{
System.Diagnostics.Debug.WriteLine("disposed!");
}
Lösung
Anhand Ihres Codes kann ich natürlich sagen, dass er aufgrund Ihres Codes nicht entsorgt wird MainPage
enthält immer noch den Verweis auf page
.Versuchen Sie, es nach dem Entfernen auf Null zu setzen:
page = null;
Es reicht jedoch nicht aus, die Kontrolle sofort zu entsorgen.Sie müssen auf den GC-Prozess warten oder ihn zu einem späteren Zeitpunkt direkt aufrufen:
GC.Collect();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow