如何清除()控件而不会导致内存泄漏

isp*_*iro 2 c# memory-leaks winforms

在阅读了Control.Clear();导致内存泄漏(在MSDN上验证)之后,我想知道是否:

while (Controls.Count > 0) Controls[0].Dispose();
Run Code Online (Sandbox Code Playgroud)

就足够了,还是我必须递归遍历控件中的所有控件?

此外,有没有理由Control.Clear();在那之后做一个?(因为我看到有人说某处)?

谢谢.

Han*_*ant 6

已发布的代码段是正确的.不需要Clear(),Control.Dispose()方法已从Controls集合中删除控件.这就是它的原因.

循环的不太令人担忧的版本是:

 for (int ix = Controls.Count-1; ix >= 0; --ix) Controls[ix].Dispose();
Run Code Online (Sandbox Code Playgroud)

无需遍历控件的子代并处理它们,这已经自动发生.