场景如下,因为我(实际上)处理我的资源是非常新的,我不完全确定它是否适用于我的示例。 这里的基本场景真正简化了演示:
我有一个用户控件MyUserControl
,其中包含scrollViewer
。我还有一个MyClass
类,其中包含grid
和tabItem
,并且用户界面有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
的资源,但我不一定要从mc
删除list
。
是否足以从tabItem
移除tabControl
并设置mc.tabItem = null
?
答案 0 :(得分:2)
除此之外,你在这里建造的真的不是要走的路,只是为了回答你的问题:
只要'list'包含'mc'并且'mc'包含对'tabItem'的引用,'tabItem'包含对'uc'的引用,'uc'将不会被垃圾收集。 'tabItem'是否仍在'tabControl'中无关紧要。
如果将mc.tabItem设置为null,则不再引用uc,uc将收集垃圾。因此,您的问题得到是。而且,要成为学术性的,将tabItem.Content
设置为null就足够了。