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

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

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

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

Ответы [ 3 ]

9 голосов
/ 16 августа 2010

Вам нужно:

using Microsoft.Win32;   

И вот код:

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

Это то, с чем я пошел.

6 голосов
/ 06 августа 2010

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

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

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

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

2 голосов
/ 06 августа 2010

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

...