Лучший способ убить экземпляр приложения

Каков наилучший способ убить экземпляр приложения? Я знаю об этих трех методах:

  1. Application.Exit()

  2. Environment.Exit(0)

  3. Process.GetCurrentProcess().Kill()

Может кто-нибудь сказать мне, что лучше или при использовании каждого из вышеперечисленных будет уместно?

Ответ 1

рекомендации из С# faq:

System.Windows.Forms.Application.Exit() - информирует все насосы сообщений, которые они должны завершить, а затем закрывает все окна приложений после обработки сообщений. Этот метод останавливает все запущенные петли сообщений для всех потоков и закрывает все окна приложения. Этот метод не заставит приложение выйти. Метод Exit обычно вызывается из цикла сообщений и принудительно запускает Run. Чтобы выйти из цикла сообщений только для текущего потока, вызовите ExitThread. Это вызов для использования, если вы используете приложение WinForms. В качестве общего руководства используйте этот вызов, если вы вызвали System.Windows.Forms.Application.Run.

System.Environment.Exit(exitCode) - завершает этот процесс и предоставляет базовой операционной системе указанный код выхода. Этот вызов требует наличия разрешений SecurityPermissionFlag.UnmanagedCode. Если вы этого не сделаете, произойдет ошибка SecurityException. Это вызов для использования, если вы используете консольное приложение.

Убийство процесса, скорее всего, не рекомендуется.

Ответ 2

Если это приложение Windows Forms, используйте Application.Exit(). Это прекрасно закроет программу.

Ответ 3

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

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

Кажется, что нет никакой разницы между двумя указанными вами опциями "Выход" , я бы сказал, что первая просто неявно передаёт нулевое значение.

Ответ 4

 foreach (Process proc in Process.GetProcessesByName("WindowsFormsApplication1.vshost"))
        {

            proc.Kill();

        }