.NET WinForm GC вопрос - PullRequest
       14

.NET WinForm GC вопрос

1 голос
/ 14 марта 2009

Чист ли этот код?

private void button1_Click(object sender, EventArgs e)
{
  frmCustomDialog f = new frmCustomDialog();
  if(f.ShowDialog() == DialogResult.OK)
    TextBox1.Text = f.MyCustomProperty;
}

Вам нужно закрыть или удалить форму f или что-нибудь еще? Или это автоматически сборщик мусора?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 14 марта 2009

Да, вы должны избавиться от формы:

private void button1_Click(object sender, EventArgs e)
{
    using (frmCustomDialog f = new frmCustomDialog())
    {
        if(f.ShowDialog() == DialogResult.OK)
        {
            TextBox1.Text = f.MyCustomProperty;
        }
    }
}

ShowDialog() не распоряжается формой, так как вы можете использовать ее и показать снова. Если вам не нужно этого делать, вы должны просто утилизировать его самостоятельно.

Из документов ShowDialog():

В отличие от немодальных форм, Закрыть метод не вызывается .NET Framework, когда пользователь нажимает кнопка закрытия формы диалогового окна или устанавливает значение DialogResult имущество. Вместо этого форма скрыта и может быть показан снова без создание нового экземпляра диалога коробка. Потому что форма отображается как диалоговое окно не закрыто, необходимо вызовите метод Dispose формы когда форма больше не нужна ваше заявление.

4 голосов
/ 14 марта 2009

Если вы показываете форму как диалоговую форму (которую вы вызываете с помощью form.ShowDialog ()), вам придется вручную избавиться от объекта, поскольку метод Close формы не вызывается автоматически при закрытии формы (форма скрыта).

Вы можете прочитать больше здесь .

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