Как избежать, чтобы приложение WPF не отвечало при выходе из системы
При попытке нажать стандартную кнопку выхода из Windows 7 во время работы моего приложения WPF я получаю сообщение "Эта программа не позволяет Windows выйти из системы". Я хотел бы принудительно закрыть его, не нажимая кнопку "Принудительный выход из системы".
Аналогично, нажатие "Завершить задачу" в диспетчере задач (приложения) приводит к тому, что он перестает отвечать на запросы, а не просто закрывает программу.
Я попытался добавить это в Window_Closing, но, похоже, это не делает:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Environment.Exit(0);
}
Я новичок в WPF, но мне кажется, что окно не закрывается должным образом. Как я могу предотвратить "программа не позволяет Windows выходить из системы" при выполнении выхода из системы Windows, или "программа не отвечает" при ее удалении из диспетчера задач?
1 ответ
Это должно быть проблемой, только если ваше приложение не отвечает на события закрытия, отправленные из Windows.
Обычно это происходит, если вы выполняете код в потоке пользовательского интерфейса, который не позволяет ему отвечать на сообщения. Таким образом, помещение чего-либо в закрывающие события и тому подобное не будет иметь никакого эффекта, поскольку они не смогут обрабатываться до тех пор, пока ваша "работа" не закончится.
Правильный способ справиться с этим - перенести свою работу в фоновые потоки. Это сохраняет приложение отзывчивым, что позволяет ему отвечать на запрос Windows закрыть.