Как стать автором
Обновить

Комментарии 11

Перенесите в блог .NET

А есть что-то похожее для консоли? То есть, можно ли как-то способами .NET перехватить Ctrl-Break? Товарищ нашел способ через вызов WinAPI, но должно же быть что-то встроенное.
Спасибо, перенес.
По поводу консоли — я таких способов не знаю. =(
private static void Main(string[] args)
{
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
switch(e.SpecialKey)
{
case ConsoleSpecialKey.ControlBreak:
//Ваш код
break;
}
}
Пользуйтесь
Совершенно верно.
Отмечу только, что обработчик события CancelKeyPress выполняется в другом потоке, поэтому использование в нём несинхронизированных Console.WriteLine может перемешать вывод основного потока и нашего обработчика, а Console.ReadLine вообще может выкинуть исключение, был как-то такой случай.
Было бы замечательно, если бы она реагировала на отключение электропитания и успевала сохранять данные =) (шутка)
купите UPS:)
Ну упс сработает, пошлет сигнал. Его ведь надо обработать и запустить фукнцию сохранения, или может еще чего. Можно, конечно, хибирнейтить, но вдруг нужны какие-то доп. действия перед хибирнейтом?
Если программа не работает с удалёнными источниками данных, то ничего с ней не будет.
Можно подписаться на события по поводу Hibernate или же на событие что программа перешла на питание от батарей (если это ноутбук, можно прервать сложные рассчеты, если компьютер — то упс).
Еще есть такой static класс SystemEvents, там в частности есть события которые сигнализируют о входе/выходе из энергосберегающего режима, а также вход/выход/переключение сенса пользователя и другие системные события. Также работает в консоле.
ээ ну что же вы так, такую информацию можно найти где угодно. И разве она заслуживает быть на главной хабра?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории