1

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

我有一个用户控件MyUserControl,其中包含一个scrollViewer. 此外,我有一个MyClass包含 agrid和 a的类,tabItem并且 UI 有 a 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但我不一定会mclist. 删除tabItemtabControl设置是否足够mc.tabItem = null

4

1 回答 1

2

除此之外,您在这里构建的东西确实不是要走的路,只是为了回答您的问题:

只要 'list' 包含 'mc' 并且 'mc' 持有对 'tabItem' 的引用并且 'tabItem' 持有对 'uc' 的引用,'uc' 就不会被垃圾回收。'tabItem' 是否仍在'tabControl' 中并不重要。

如果将 mc.tabItem 设置为 null,则不再引用 uc 并且 uc 将被垃圾收集。所以,你的问题是肯定的。tabItem.Content而且,为了学术,将其设置为 null就足够了。

于 2013-09-19T21:38:36.530 回答