Как изящно работать с режимами гибернации / сна в приложении winforms?

Я пишу приложение Windows Form в .net с использованием C #.

У меня проблема с тем, что если моя программа работает, когда компьютер переходит в спящий режим и / или режим гибернации (в настоящее время я не уверен, какой из них или оба вызывают проблему), когда машина снова просыпается программа просто зависает. Единственный способ выйти из него - убить процесс из диспетчера задач.

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

16
задан John Saunders 16 August 2010 в 19:27
поделиться

3 ответа

Вам нужно:

using Microsoft.Win32;   

А это код:

 void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        if(e.Mode == PowerModes.Suspend)
        {
            this.GracefullyHandleSleep();
        }
    }

Вот что у меня получилось.

9
ответ дан 30 November 2019 в 22:37
поделиться

Обработка этих событий может быть обходным решением. Но перед применением такого обходного пути я бы попытался выяснить, что делало приложение, когда ОС перешла в спящий режим.

Происходит ли зависание, хотя приложение просто простаивало?

Выполняет ли приложение какую-то низкоуровневую работу (взаимодействие с драйверами устройств или внешним оборудованием), которая не должна прерываться?

Использует ли приложение какое-то сетевое подключение?

6
ответ дан 30 November 2019 в 22:37
поделиться

В этой статье рассматривается прослушивание этих событий. Вам нужно будет сделать что-то вроде переопределения WndProc и прослушивания событий PBT_APMSUSPEND.

2
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: