我有一个简单的消息传递wpf应用程序,它监听一个wcf双工服务来接收消息。我已经编码它,如果网络发生故障(或者我断开LAN电缆),它会重新连接到运行良好的服务。如何才能对从wpf应用程序中的睡眠模式唤醒的窗口做出反应?
我的问题是,当Windows进入睡眠模式时,它无法尝试重新连接。我怀疑这是因为我的轮询网络计时器进入睡眠状态,因此轮询停止。
那么,有没有一种方法来应对一个“Windows已经苏醒”事件或类似的?
我有一个简单的消息传递wpf应用程序,它监听一个wcf双工服务来接收消息。我已经编码它,如果网络发生故障(或者我断开LAN电缆),它会重新连接到运行良好的服务。如何才能对从wpf应用程序中的睡眠模式唤醒的窗口做出反应?
我的问题是,当Windows进入睡眠模式时,它无法尝试重新连接。我怀疑这是因为我的轮询网络计时器进入睡眠状态,因此轮询停止。
那么,有没有一种方法来应对一个“Windows已经苏醒”事件或类似的?
我终于找到了我想要的,简单的,托管代码的方式作出反应,系统恢复事件......
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的(主要)的好处是,红外线可以跨操作系统使用(我不需要额外的Windows XP操作系统& Vista),当然,它更有意思!
你见过http://www.codeproject.com/KB/system/OSEvents.aspx?
它是用C++编写,但我相信它仅使用Win32API的,所以使用P/Invoke,你应该能够使用代码在你的应用程序。 :)