Dot-Net

明確的控制並不能消除它們——風險是什麼?

  • July 6, 2020

關於 .NET 組件容器中的Clear () 項目不處置它們(通過呼叫 Dispose( true )的事實有多個執行緒(abc等)。

大多數情況下,恕我直言,應用程序中不再使用已清除的組件,因此需要在從父容器中清除它們後顯式地處理它。

集合的Clear方法有一個 bool 參數可能是一個好主意,dispose當它在 true 時也會在集合元素從列表中刪除之前處理集合元素?

要求這樣的修改是沒有意義的,Windows Forms 團隊早就解散了。它處於維護模式,僅考慮安全問題和作業系統不兼容問題。

否則,創建自己的方法來執行此操作非常簡單:

 public static class ExtensionMethods {
   public static void Clear(this Control.ControlCollection controls, bool dispose) {
     for (int ix = controls.Count - 1; ix >= 0; --ix) {
       if (dispose) controls[ix].Dispose();
       else controls.RemoveAt(ix);
     }
   }
 }

現在你可以寫:

 panel1.Controls.Clear(true);

引用自:https://stackoverflow.com/questions/1969705