У меня есть приложение, которое получало странные ошибки при отмене из диалогового окна. Приложение не может продолжить работу, если окно отменено, поэтому оно закрывается, но по какой-то причине оно не работает, и поэтому оно продолжает работать и вылетает.
Я отладил эту проблему, и каким-то образом приложение запускается сразу после вызова Application.Exit. Я работаю в режиме отладки, и это актуально из-за небольшого объема кода, который зависит от определяемой переменной RELEASE. Вот код выхода моего приложения. Я проследил код, и он вошел в метод ExitApp и продолжает работать, возвращая управление вызывающей стороне и в конечном итоге вылетая.
Это приложение, которое предоставляет отчеты по подключению к удаленному рабочему столу, поэтому код выхода немного странный. Он пытается завершить удаленный сеанс, но только при работе в режиме выпуска, потому что я не хочу выключать свою машину разработчика при каждом запуске теста.
private void ExitApp()
{
HardTerminalExit();
Application.Exit();
}
// When in Debug mode running on a development computer, this will not run to avoid shutting down the dev computer
// When in release mode the Remote Connection or other computer this is run on will be shut down.
[Conditional("RELEASE")]
private void HardTerminalExit()
{
WTSLogoffSession(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, false);
}
Я запустил отладчик сразу за строкой Application.Exit, и ничего не происходит, а затем элемент управления возвращается к вызывающей программе после того, как я прошёл эту строку.
Что происходит? Это приложение Windows Forms.