it-swarm-ru.tech

Конец .NET против Form.Close () против Application.Exit Cleaner способ закрыть приложение

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

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

Спасибо

13
GianT971

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

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

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

Настройки, о которых я говорю, выделены здесь:

Visual Studio Project Properties

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

21
Cody Gray

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

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

9
Josh

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

2
Randall Spychalla

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

0
nullpointer