[英]How to set list items to null C#?
我有一個名為container的用戶控件,我在運行時添加其他用戶控件。
我想從容器中刪除所有控件,我正在做container.Controls.Clear()
但我的控件仍然在內存中,我怎樣才能使它們為空?
調用Clear方法不會從內存中刪除控制句柄。 您必須顯式調用Dispose方法以避免內存泄漏。
閱讀更多: http : //msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.clear.aspx
假設面板是您包含所有子控件的父控件,因此遍歷所有子控件並調用每個控件的dispose方法...這可能會解決您的問題
while (panel.Controls.Count > 0)
{
panel.Controls[0].Dispose();
}
調用clear方法只是從容器控件中刪除你的控件,而不是從內存中移除控件,所以你需要處理它們......
在父容器上調用Dispose()
也將處理它的所有子控件,假設它們也實現了IDisposable
。 一般來說,所有WinForms控件都將實現IDisposable,因此這應該可行。
如果它們不這樣(因為WPF控件不會隱式使用非托管代碼,因此WPF就是這種情況),您需要為控件添加一些自定義清理方法。 最常見的內存泄漏源之一是未分離的事件處理程序。 我通常會做以下事情:
public void CleanUp()
{
//detach event handlers
//other cleanup as necessary
}
如果您將此虛擬化並將其添加到用戶控件將繼承的基類,這將特別有用,因此您只需調用CleanUp()
而無需檢查類型。 我個人喜歡這種方法,而不是實現IDisposable,因為IDisposable主要用於清理非托管資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.