윈도우 폰 8:사용자 컨트롤을 상위 패널에서 제거하면 삭제할 수 없나요?

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

문제

콘텐츠 패널이 있는 간단한 애플리케이션 페이지가 있고 콘텐츠 패널에 사용자 컨트롤을 추가합니다.버튼을 클릭하여 제거하면 userControl의 소멸자가 실행되지 않았습니다.왜?

내 메인 페이지는 다음과 같습니다.

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

버튼 클릭 이벤트는 다음과 같습니다.

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);
    }

프롬프트페이지.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>

프롬프트페이지.xaml.cs:

    public PromptPage()
    {
        InitializeComponent();
    }


    ~PromptPage()
    {
        System.Diagnostics.Debug.WriteLine("disposed!");
    }
도움이 되었습니까?

해결책

귀하의 코드를 보면 당연히 폐기되지 않을 것이라고 말할 수 있습니다. MainPage 아직도 에 대한 언급이 남아있습니다 page.제거한 후 null로 설정해 보십시오.

page = null;

그러나 컨트롤을 즉시 폐기하는 것만으로는 충분하지 않습니다.GC 프로세스를 기다리거나 나중에 특정 시점에 직접 호출해야 합니다.

GC.Collect();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top