هاتف ويندوز 8:لا يمكن التخلص من عنصر تحكم المستخدم عند إزالته من اللوحة الأم؟
-
20-12-2019 - |
سؤال
لدي صفحة تطبيق بسيطة بها لوحة محتوى، وأقوم بإضافة عنصر تحكم المستخدم في لوحة المحتوى.عندما أنقر فوق زر لإزالته، لم يتم تنفيذ أداة التدمير الخاصة بـ 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);
}
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!");
}
المحلول
من الكود الخاص بك، أستطيع أن أقول بالطبع أنه لن يتم التخلص منه لأن الخاص بك MainPage
لا يزال يحمل الإشارة إلى page
.حاول تعيينها فارغة بعد الإزالة:
page = null;
ولكن لا يكفي التخلص من عنصر التحكم على الفور.يجب عليك انتظار عملية GC أو الاتصال بها مباشرة في وقت لاحق:
GC.Collect();
لا تنتمي إلى StackOverflow