App.Exit не выходит сразу? - PullRequest
8 голосов
/ 01 июня 2011

Я предположил, что Application.Exit вызывает немедленное завершение работы приложения, но я вижу, что в соответствии с приведенным ниже примером оно завершится после завершения цикла for.Также когда эта команда заставит приложение выйти?

for (int I = 0; I < 1000; I++)
{
    if (I == 1)
        Application.Exit();
}

Ответы [ 5 ]

9 голосов
/ 01 июня 2011

Как вы можете видеть здесь , этот метод «информирует все насосы сообщений о том, что они должны прекратить работу» и «Этот метод не заставляет приложение завершаться».

6 голосов
/ 01 июня 2011

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

3 голосов
/ 01 июня 2011

Является ли вопрос "как я могу выйти прямо сейчас?"Если это так, перейдите с Environment.FailFast - это самый быстрый выход, и в качестве дополнительного бонуса вы можете оставить запись в журнале событий.Как сказано в MSDN ,

Этот метод завершает процесс без запуска каких-либо активных блоков try / finally или финализаторов.

Метод FailFast записывает строку сообщения в журнал событий приложений Windows, создает дамп приложения и завершает текущий процесс.Строка сообщения также включена в отчет об ошибках в Microsoft.

Используйте метод FailFast вместо метода Exit, чтобы завершить работу вашего приложения, если состояние вашего приложения повреждено и не подлежит восстановлению, и выполнить блоки try / finally вашего приложенияи финализаторы повредят программные ресурсы.

2 голосов
/ 01 июня 2011

С MSDN :

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

-

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

1 голос
/ 01 июня 2011

Проверка MSDN

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

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