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