如何在wpf应用程序中对从睡眠模式唤醒的窗口做出反应?

时间:2011-11-09 18:22:12

标签: c# wpf

我有一个简单的消息传递wpf应用程序,它监听wcf双工服务以接收消息。我编写了它,以便在网络出现故障时(或我断开LAN电缆),它会重新连接到运行良好的服务。

我的问题是,当Windows进入睡眠模式时,它无法尝试重新连接。我怀疑这是因为我的用于轮询网络的计时器进入休眠状态,因此轮询停止。

那么,有没有办法对“Windows已经唤醒”事件或类似事件作出反应?

2 个答案:

答案 0 :(得分:2)

我终于找到了我想要的东西,一种简单的托管代码方式来响应系统恢复事件...

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可以在OS上运行(我不需要对Windows XP和Vista进行额外处理),当然,它更加明智!

答案 1 :(得分:0)

你见过http://www.codeproject.com/KB/system/OSEvents.aspx吗?

它是用C ++编写的,但我相信它只使用Win32API,所以使用P / Invoke你应该可以使用你的应用程序中的代码。 :)