如果用户控件包含其他对象中的控件,是否可以正确处置?

时间:2013-09-19 20:21:08

标签: c# wpf resources

场景如下,因为我(实际上)处理我的资源是非常新的,我不完全确定它是否适用于我的示例。 这里的基本场景真正简化了演示:

我有一个用户控件MyUserControl,其中包含scrollViewer。我还有一个MyClass类,其中包含gridtabItem,并且用户界面有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

1 个答案:

答案 0 :(得分:2)

除此之外,你在这里建造的真的不是要走的路,只是为了回答你的问题:

只要'list'包含'mc'并且'mc'包含对'tabItem'的引用,'tabItem'包含对'uc'的引用,'uc'将不会被垃圾收集。 'tabItem'是否仍在'tabControl'中无关紧要。

如果将mc.tabItem设置为null,则不再引用uc,uc将收集垃圾。因此,您的问题得到。而且,要成为学术性的,将tabItem.Content设置为null就足够了。