Windows Phone 8:Die Benutzersteuerung kann nicht entsorgt werden, wenn sie aus dem übergeordneten Bereich entfernt wurde?

StackOverflow https://stackoverflow.com//questions/23002391

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!");
    }
War es hilfreich?

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
scroll top