А есть что-то похожее для консоли? То есть, можно ли как-то способами .NET перехватить Ctrl-Break? Товарищ нашел способ через вызов WinAPI, но должно же быть что-то встроенное.
Совершенно верно.
Отмечу только, что обработчик события CancelKeyPress выполняется в другом потоке, поэтому использование в нём несинхронизированных Console.WriteLine может перемешать вывод основного потока и нашего обработчика, а Console.ReadLine вообще может выкинуть исключение, был как-то такой случай.
Ну упс сработает, пошлет сигнал. Его ведь надо обработать и запустить фукнцию сохранения, или может еще чего. Можно, конечно, хибирнейтить, но вдруг нужны какие-то доп. действия перед хибирнейтом?
Можно подписаться на события по поводу Hibernate или же на событие что программа перешла на питание от батарей (если это ноутбук, можно прервать сложные рассчеты, если компьютер — то упс).
Еще есть такой static класс SystemEvents, там в частности есть события которые сигнализируют о входе/выходе из энергосберегающего режима, а также вход/выход/переключение сенса пользователя и другие системные события. Также работает в консоле.
Определение причины закрытия приложения Windows Forms (.Net)