.NET End против Form.Close () против Application.Exit Cleaner способ закрыть свое приложение - PullRequest
13 голосов
/ 12 февраля 2011

иногда, когда я использую Form.close () при отладке моей программы, хотя форма закрыта, приложение все еще работает. Я заметил это при использовании функции msgbox.

У меня нет ни потока, ни таймера, так как лучше всего закрыть приложение .NET? Я использую VB.NET.

Спасибо

Ответы [ 6 ]

21 голосов
/ 12 февраля 2011

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

Другая возможность состоит в том, что вы изменили свой проект (используя его страницу свойств), чтобы не закрывать до все открытые окна были закрыты.В этом режиме ваше приложение не закроется, пока не будет закрыта последняя оставшаяся открытая форма.Если вы выбрали этот параметр, вы должны убедиться, что вы вызываете метод Close для всех форм, которые вы показывали в ходе применения, а не только для начальной / основной формы.

Первая настройка по умолчанию по какой-то причине, и если вы ее изменили, вы, вероятно, захотите исправить ее.
Это, безусловно, самая интуитивно понятная модель для обычных приложений, и она предотвращаетименно ту ситуацию, которую вы описываете.Для правильной работы убедитесь, что вы указали main форму в качестве «формы запуска» (а не заставку или форму входа).

Настройки I 'Здесь обсуждаются следующие темы:

Visual Studio Project Properties

Но, прежде всего, обратите внимание, что вам никогда не придется звонить Application.Exit в правильно разработанном приложении .Если вам нужно сделать это для того, чтобы ваша программа полностью закрылась, значит, вы делаете что-то не так.Само по себе это не плохая практика, если у вас есть на то веские основания.Два других ответа не могут это объяснить, и поэтому я чувствую, что в лучшем случае они неполны.

9 голосов
/ 12 февраля 2011

В .Net 1.1 и более ранних версиях Application.Exit не был разумным выбором , и документы MSDN были специально рекомендованы против него, поскольку вся обработка сообщений немедленно прекращалась.

Однако в более поздних версиях вызов Application.Exit приведет к тому, что Form.Close будет вызываться во всех открытых формах приложения, что дает вам возможность выполнить очистку после себя или даже полностью отменить операцию.

3 голосов
/ 15 сентября 2012

Если вы находитесь в цикле (Do While, For, ...) и вызываете Me.Close(), вам следует выполнить команду Exit (Exit Do, ...) или Return() для принудительного вывода сообщения обработка для правильного завершения. Я поймал зависание программ из-за этого.

0 голосов
/ 05 мая 2016

Application.Exit() убивает ваше приложение, но в некоторых случаях оно не закрывает приложение.

End лучше, чем Application.Exit().

0 голосов
/ 27 апреля 2015

Просто вставьте ключевое слово "End" в свой код.

Sub Form_Load()
  Dim answer As MsgBoxResult
  answer = MsgBox("Do you want to quit now?", MsgBoxStyle.YesNo)
  If answer = MsgBoxResult.Yes Then
      MsgBox("Terminating program")
      End 
  End If 
End Sub
0 голосов
/ 12 февраля 2011

Form.Close () используется для закрытия экземпляра Form в приложении .NET, которое не уничтожает все приложение.Application.exit () убивает ваше приложение.

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