Закрытие приложений
Какова наилучшая практика при закрытии приложения С#?
Я прочитал, что вы можете использовать:
Environment.Exit(0); or Application.Exit();
Но в чем разница?
Кроме того, что касается среды. Exit (0), я использовал коды выхода до того, как работал с Java, но никогда не понимал их цели. Какую роль они играют при выходе из приложения на С#?
Ответы
Ответ 1
System.Windows.Forms.Application.Exit()
- информирует все рассылки сообщений о том, что они должны завершиться, а затем закрывает все окна приложений после обработки сообщений. Этот метод останавливает все запущенные циклы сообщений во всех потоках и закрывает все окна приложения. Этот метод не заставляет приложение закрываться. Метод Exit()
обычно вызывается из цикла сообщений и вынуждает Run()
возвращаться. Чтобы выйти из цикла сообщений только для текущего потока, вызовите ExitThread()
. Это вызов для использования, если вы используете приложение Windows Forms. Как правило, используйте этот вызов, если вы звонили System.Windows.Forms.Application.Run()
.
System.Environment.Exit(exitCode)
- завершает этот процесс и дает базовой операционной системе указанный код выхода. Этот вызов требует, чтобы у вас были права SecurityPermissionFlag.UnmanagedCode
. Если вы этого не сделаете, возникает ошибка SecurityException
. Это вызов, который нужно использовать, если вы запускаете консольное приложение.
Я надеюсь, что лучше всего использовать Application.Exit
Смотрите также эти ссылки:
Ответ 2
Application.Exit
для приложений Windows Forms - он информирует все насосы сообщений, которые они должны прекратить, ждет их завершения обработки событий, а затем завершает работу приложения. Обратите внимание, что это не обязательно заставляет приложение выйти.
Environment.Exit
применим для всех приложений Windows, однако он в основном предназначен для использования в консольных приложениях. Он немедленно завершает процесс с заданным кодом выхода.
В общем случае вы должны использовать Application.Exit
в приложениях Windows Forms и Environment.Exit
в консольных приложениях (хотя я предпочитаю, чтобы метод/точка ввода Main
выполнялся до завершения, а не вызывал Environment.Exit
в консольных приложениях).
Подробнее см. документацию MSDN.
Ответ 3
Какую роль они играют при выходе из приложения на С#?
То же, что и в любом другом приложении. В основном они возвращаются вызывающему. Irrelvant, если вы начали двойным щелчком iicon. Релевантным является вызов командного файла, который решает, работает ли приложение в коде возврата. SO, если вы не пишете нужную ему программу, возвращаемый dcode не имеет значения.
Но в чем разница?
Один из среды один из System.Windows.Forms?.Application. Функционально не должно быть большой разницы.
Ответ 4
для меня лучшее утешение это
Thread.CurrentThread.Abort();
и принудительно закрыть приложение.