簡體   English   中英

如果用戶控件在另一個對象中包含控件,該控件將被正確處置嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM