Как я могу реагировать на выход Windows из спящего режима в приложении wpf?

#c# #wpf

#c# #wpf

Вопрос:

У меня есть простое приложение wpf для обмена сообщениями, которое прослушивает службу wcf duplex для получения сообщений. Я закодировал его так, что в случае сбоя сети (или я отключаю кабель локальной сети) он повторно подключается к службе, которая работает хорошо.

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

Итак, есть ли способ отреагировать на событие «Windows проснулась» или подобное?

Ответ №1:

Я наконец нашел то, что хотел, простой способ с управляемым кодом реагировать на событие возобновления работы системы…

 Microsoft.Win32.SystemEvents.PowerModeChanged  = this.SystemEvents_PowerModeChanged;

private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e)
{
    if (e.Mode == PowerModes.Resume)
        {
            //Do Some processing here
        }
}
  

(Основное) преимущество этого подхода по сравнению с p / invoke заключается в том, что ir работает во всех ОС (мне не нужна дополнительная обработка для Windows XP и Vista) и, конечно же, это более удобно!

Ответ №2:

Вы видели http://www.codeproject.com/KB/system/OSEvents.aspx ?

Он закодирован на C , но я полагаю, что он использует только Win32API, поэтому с помощью P / Invoke вы сможете использовать код в своем приложении. 🙂