Утилизация некомпонентных компонентов при удалении формы? - PullRequest
7 голосов
/ 30 сентября 2010

У меня есть форма, в которой есть член, который реализует IDisposable, но не IComponent. Мне нужно избавиться от него, когда форма избавится. К сожалению, расположение формы уже реализовано в автоматически сгенерированной части кода и не является частичным.

Как я могу избавиться от этого объекта?

Ответы [ 2 ]

4 голосов
/ 30 сентября 2010

Переопределить Form.Dispose (bool) в вашей форме и избавиться от вашего объекта там.

Чтобы понять, как это работает, вы можете обратиться к странице MSDN на Реализация метода удаления . Класс Form следует этому шаблону, что позволяет переопределять Dispose(bool) в подклассах. (Просто убедитесь, что вы правильно набрали base.Dispose(disposing) в вашем переопределении.)


Если вам неудобно перемещать это из файла .designer.cs в ваш основной файл .cs, другой вариант - подписаться на собственное событие FormClosed и распоряжаться своими ресурсами в этом. обработчик события. MSDN рекомендует этот подход - из документов для FormClosed:

Это событие можно использовать для выполнения таких задач, как освобождение ресурсов, используемых в форме, и для сохранения информации, введенной в форму, или для обновления ее родительской формы.

1 голос
/ 30 сентября 2010

Вы можете переместить переопределенный метод Dispose(bool) на свою сторону частичного класса.По опыту он не воссоздается в дизайнерской части.

...