[英]Will a user control be correctly disposed if it contains a control within an other object?
場景如下,由於我(非常)不擅長實際配置資源,因此我不確定在我的示例中是否可以使用。 這里是為演示而簡化的基本方案:
我有一個用戶控件MyUserControl
,其中包含一個scrollViewer
。 我也有一個MyClass
類,其中包含一個grid
和一個tabItem
,而UI則具有一個tabControl
並且所有東西都將在MainWindow
如下連接:
List<MyClass> list = new List<MyClass>();
private void SomeMethod(TabItem tabItem)
{
MyUserControl uc = new MyUserControl();
MyClass mc = new MyClass();
list.Add(mc);
mc.tabItem = tabItem;
tabItem.Content = uc;
uc.scrollViewer.Content = mc.grid;
tabControl.Items.Add(tabItem);
tabControl.SelectedItem = tabItem;
}
現在,在某個時候,我想再次刪除tabItem,並希望釋放uc
的資源,但我並不一定要從list
刪除mc
。 從tabControl
刪除tabItem
並設置mc.tabItem = null
是否足夠?
除此之外,您要在這里構建的內容實際上不是走的路,僅是為了回答您的問題:
只要“列表”包含“ mc”,並且“ mc”保留對“ tabItem”的引用,並且“ tabItem”保留對“ uc”的引用,則“ uc”將不會收集垃圾。 'tabItem'是否仍在'tabControl'中並不重要。
如果將mc.tabItem設置為null,則不再有對uc的引用,並且uc將收集垃圾。 因此,您的問題得到“是” 。 而且,從學術角度來說,將tabItem.Content
設置為null就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.