Как изящно обрабатывать режимы спящего режима/спящего режима в приложении winforms?
Я пишу приложение формы Windows в .net, используя С#.
У меня проблема: если моя программа запускается, когда компьютер переходит в состояние сна и/или спящего режима (я не уверен, что в это время какой-либо из них или если они вызвали проблему), когда машина снова просыпается программа просто зависает. Единственный способ выйти из него - это убить процесс из диспетчера задач.
Это по очевидным причинам не так, как я хочу, чтобы программа функционировала. Даже если я просто закрою программу, когда она войдет в эти состояния, это будет хорошо, но я не совсем уверен, как это сделать или если есть более изящный способ обработки этого.
Ответы
Ответ 1
Вам нужно:
using Microsoft.Win32;
И это код:
void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
if(e.Mode == PowerModes.Suspend)
{
this.GracefullyHandleSleep();
}
}
Это то, с чем я пошел.
Ответ 2
Обработка этих событий может быть обходной. Но прежде чем применять этот вид работы, я попытаюсь выяснить, что делает приложение, когда ОС перешла в спящий режим.
Происходит висит, хотя приложение просто простое?
Является ли приложение выполняющим какую-либо работу на низком уровне (связь с драйверами устройств или внешним оборудованием), которые не должны прерываться?
Использует ли приложение какое-то сетевое подключение?
Ответ 3
Эта статья описывает прослушивание этих событий. Вам нужно будет сделать что-то вроде переопределения WndProc и прослушать события PBT_APMSUSPEND.