簡體   English   中英

如何將列表項設置為null C#?

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

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