Выход из приложения winforms C # - PullRequest
16 голосов
/ 14 декабря 2011

У меня есть приложение, которое импортирует данные из Excel. Однако, когда я запускаю приложение winforms и прерываю его, используя System.Windows.Forms.Application.Exit();, я все еще вижу «MyAppName» .vshost32.exe, работающий в диспетчере задач.

Когда я выхожу из приложения в режиме отладки, форма закрывается, но VS IDE не «останавливается».

Как обеспечить правильное завершение приложения.

Ответы [ 4 ]

23 голосов
/ 14 декабря 2011

Ваш звонок на Application.Exit() работает нормально. Исполняемый файл MyAppName.vshost32.exe является хостом для целей отладки. Он работает, пока у вас есть проект, открытый в Visual Studio, независимо от того, есть ли активный сеанс отладки.

Обновление: Хорошо, я не понял. Вышеприведенное верно, но у вас, вероятно, проблемы с зависшими потоками в фоновом режиме. Вы должны прекратить свои темы, чтобы закрыть его правильно. Ответ Ашера покрывает это. Если вы просто пытаетесь сделать супер-хакерское быстрое и грязное убийство, вы можете использовать следующее (хотя я не несу ответственности за побочные эффекты, так как это очень хакерский):

System.Diagnostics.Process.GetCurrentProcess().Kill();

16 голосов
/ 14 декабря 2011

Процесс не завершается, потому что все еще работают потоки переднего плана .

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

7 голосов
/ 14 декабря 2011

Вы пробовали более брутальную функцию Environment.Exit()?

Application.Exit() просто отправляет сообщение о завершении работы; если сообщение не будет обработано (по какой-либо причине), приложение будет работать бесконечно долго.

Из документации MSDN Application.Exit():

Метод Exit останавливает все запущенные циклы сообщений во всех потоках и закрывает все окна приложения. Этот метод не обязательно принудительно завершает приложение. Метод Exit обычно вызывается из цикла сообщений и заставляет Run вернуться.

4 голосов
/ 17 апреля 2013

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

System.Diagnostics.Process.GetCurrentProcess().Kill();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...