почему объект формы все еще жив, когда переменная выходит из области видимости? - PullRequest
0 голосов
/ 21 марта 2012

Вот вопрос:

Private void   buttonFrmshow_Click(..)
{ 
  frmEmployee f = new frmEmployee() //frmEmployee is derived from System.Windows.Form;
  f.Show();
}

Теперь, когда f является локальной переменной, область действия которой ограничена методом clickclick, 1. Почему форма «Сотрудник» должна быть активной все время, хотя переменная область действия завершена? 2. Будет ли он автоматически GCed? 3. Переменная f в приведенном выше коде показывает, что она пуста, но форма сотрудника активна? Что происходит за кадром?

Это как-то связано с Threading?

Ответы [ 2 ]

1 голос
/ 21 марта 2012

При создании новых форм они добавляются в коллекцию Application.OpenForms , которая сохраняет их в области действия после выхода из области локальной переменной.

При закрытии формыудалите его из этой коллекции и позвольте ему быть собранным.

0 голосов
/ 21 марта 2012

Позволяет сделать одну вещь прямой.

До тех пор, пока ссылка на объект ссылочного типа (форма здесь) указана, GC никогда не коснется его.Как только ссылка удалена, только GC может быть разрешено возвращать ресурсы.

После создания экземпляра формы на него непрерывно ссылаются, вызывая различные методы рисования, даже когда она простаивает.если он явно не закрыт пользователем или оболочкой ОС, он будет продолжать занимать ресурсы в основном потоке приложения.

...