我已實施WPF UserControl
。 該實現包含析構函數。如果我使這個控件成爲一個窗口的一部分,然後銷燬這個窗口,然後強制垃圾回收(GC.Collect()),則會調用析構函數。用戶控件在從選項卡控件中移除時未定型
如果我這個控件添加到TabItem
,後者又加入TabControl
,後來刪除此TabItem
從TabControl
,然後強制垃圾收集(GC.Collect的()),析構函數沒有被調用。
澄清:
這裏是增加了標籤項目代碼:
TabItem tabItem = new TabItem();
tabItem.Header = "User";
UserControl1 userControl1 = new UserControl1();
tabItem.Content = userControl1;
userControl1.Width = Double.NaN;
userControl1.Height = Double.NaN;
userControl1.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
userControl1.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
tc1.Items.Add(tabItem);
這裏是代碼,將其刪除:
TabItem item = tc1.SelectedItem as TabItem;
if (item != null)
{
item.Content = null;
tc1.Items.Remove(item);
}
鑑於目前不應該再任何對TabItem或UserControl1的引用,我都希望爲UserControl1調用析構函數。
這顯然不是這樣,所以我的下一個問題是爲什麼?
可能重複[TabControl.Items.Remove(TabItem)不釋放TabItem使用的內存](http://stackoverflow.com/questions/3167943/tabcontrol-items-removetabitem-does-not-free-memory-用於tabitem) – 2013-03-19 18:14:53
更好地描述'強制垃圾收集',因爲這可能意味着幾件事情。使用C#來避免混淆。 – 2013-03-19 18:15:50
從容器中刪除控件確實不會導致它們被破壞。這個想法是,你可能想從一個容器中移除一個控件,並立即將它添加到另一個容器中。因此,您需要手動處理從容器中刪除後不再需要的銷燬控件。 – 2013-03-19 18:15:51