Очистка объектов от формы, где и когда? - PullRequest
4 голосов
/ 26 января 2011

У меня есть простое приложение для Windows. На форме у меня есть собственный класс, который имеет свой собственный метод Dispose.

Итак, вопрос в том, когда мне это назвать?

Является ли событие FormClosed (т.е. Form1_FormClosed) правильным местом для этого? Или я должен написать собственный метод Dispose для формы?

Для бонусных баллов: можно ли снова открыть после закрытия? (Очевидно, что если это возможно, тогда FormClosed - неправильный путь!)

Спасибо.

Ответы [ 4 ]

6 голосов
/ 26 января 2011

Требуется небольшая операция. Откройте узел рядом с вашей формой в окне обозревателя решений. Дважды щелкните файл Designer.cs для формы. Найдите метод Dispose () и вставьте его в файл исходного кода формы. Теперь вы можете изменить его и вызвать методы Dispose для одноразовых ссылок на объекты в вашем классе формы.

Pre-empting: нет, можно редактировать эту часть файла конструктора. Только раздел в #region запрещен.

5 голосов
/ 26 января 2011

Элементы управления, реализующие IDisposable, должны быть добавлены к свойству System.ComponentModel.IContainer components формы.

При утилизации бланка будут выбрасываться все одноразовые вещи из этой коллекции. (Все каламбуры предназначены)

EDIT Чтобы увидеть это, просто поместите таймер в форму и посмотрите на сгенерированный код.

0 голосов
/ 26 января 2011

Если у вас есть причина, тогда на form closing вы должны проверить bool A pplication.IsExiting.

Если вы не хотите уничтожать форму, то на form closing отмените закрытие и выполните Hide().Затем форму можно открыть с помощью Show().Состояние всей формы останется прежним.

0 голосов
/ 26 января 2011

Никогда не вызывайте dispose, если у вас нет действительно веской причины для этого.

Если объект содержит тяжелый объект (изображение, соединение с базой данных и т. Д.), Вызовите close, как только вы закончите.с этим.

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

По определению «close» делает то же самое, что и «dispose» (и закрывает окна / формы).Каждый закрытый вызов в .net Framework просто вызывает внутреннее удаление.

@ comment

Я использовал приложение, которое держало около 40 МБ растровых изображений.Вызов утилизировать тех, кто действительно помог на памяти машины.Призыв распоряжаться объектами с информацией, приведенной в вопросе, невозможен.Назвать это просто потому, что это плохо, назвать его, потому что дизайнер делает это еще хуже.

...