2012-02-19 3 views
5

В следующем коде используются избыточные блоки использования или необходимы ли они для полного освобождения ресурсов?Это избыточное обертывание диалогов при использовании блоков?

using (var dialog = new AboutBox()) 
    dialog.ShowDialog(); 

using (var form = new OptionForm()) 
    form.Show(); 
+2

Ваш второй пример откроет немодальную форму, поэтому ваш код выйдет немедленно, и ваша форма будет закрыта. – Steve

+0

Не совсем необычно ничего не делать и снова сохранять форму в ShowDialog(). Например, SearchFroms. –

ответ

6

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

Второй пример может привести к ошибкам. Метод Show немедленно возвращается, и форма продолжает отображаться. Однако сгенерированный код using незамедлительно примет Dispose форму и заставит ее уйти. Форма должна быть удалена только после ее завершения.

+2

Незначительное дополнение для OP: при использовании ShowDialog он явно не распоряжается собой; при использовании Show он явно делает (когда закрыт) –

+0

Является ли метод Close() формы вызова Dispose()? Потому что, если это так, не будет форма, уже размещенная после завершения ShowDialog? (либо по вызову Close в форме, либо по щелчку пользователем на X) – asmo

+0

@asmo см. комментарий Марка для этого. – JaredPar

Смежные вопросы