Почему не происходит событие закрытия моего WPF для закрытия системы? - PullRequest
2 голосов
/ 06 июля 2010

В моем разделе Window в файле XAML есть следующая строка:

    Closing="Window_Closing"

Первоначально я думал, что веб-страница здесь заверила меня, что это событие возникает, когда вы используете big X метод закрытия, Alt-F4 или close из системного меню, но который не появляется быть так, поскольку моя точка останова на функции Window_Closing() не была достигнута.

Это действительно достигает точки останова, когда я выполняю File, Exit метод выхода, так что все работает нормально.

Перечитывание этой связанной страницы заставляет меня поверить, что она может не вызвать событие закрытия.

Мои вопросы:

  1. Как вы ловите три перечисленных метода, чтобы определить, не загрязнен ли ваш файл и требует ли он сохранения? У меня есть весь «грязный» и сохраняющий файл код, мне просто нужно знать, как перехватывать события.

  2. Можете ли вы остановить выход из этого метода (как вы можете перехватить событие закрытия)? Другими словами, если пользователь говорит, что не хочет выходить из-за случайного использования Alt-F4 в неправильном окне, можно ли это сделать?

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

В соответствии со страницей документации для события Закрытие :

Если сеанс завершается из-за выхода пользователя из системы или завершения работы, Закрытие не инициируется;обрабатывать SessionEnding для реализации кода, отменяющего закрытие приложения.

Поэтому вам нужно убедиться, что вы обрабатываете событие SessionEnding , а также событие Closing.Событие SessionEnding можно использовать для автоматического сохранения текущего состояния во временный файл, который будет загружен снова при следующем запуске приложения.Но если вы действительно хотите запросить пользователя, вы можете сделать это с помощью модального диалогового окна в SessionEnding, но он, скорее всего, увидит экран Windows, который предупреждает о не отвечающих приложениях, давая им возможность завершить процесс, не отвечая на ваш диалог.

0 голосов
/ 06 июля 2010

Попробуйте использовать событие Closed вместо: Closed="Window_Closing"

...