Как очистить () элементы управления без утечки памяти - PullRequest
2 голосов
/ 09 октября 2011

После прочтения о Control.Clear();, вызывающем утечки памяти (проверено на MSDN ), мне стало интересно, будет ли:

while (Controls.Count > 0) Controls[0].Dispose();

достаточно, или мне придется рекурсивно повторятьвсе элементы управления в элементах управления?

Кроме того, есть ли причина сделать Control.Clear(); после этого?(как я видел, кто-то что-то говорил)?

Спасибо.

1 Ответ

6 голосов
/ 09 октября 2011

Отправленный фрагмент верен.Очистка () не требуется, метод Control.Dispose () уже удаляет элемент управления из коллекции Controls.Вот почему он работает.

Менее тревожная версия цикла:

 for (int ix = Controls.Count-1; ix >= 0; --ix) Controls[ix].Dispose();

Нет необходимости перебирать дочерние элементы управления и располагать их, это уже происходит автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...