c#Timer:系统唤醒后的HTTP连接错误

时间:2011-11-27 03:23:18

标签: c# windows-7 timer resume wakeup

我在C#应用程序中有一个Timer(Win7 64)。定时器回调每20分钟通过HTTP获取一些数据。它运作良好。但是如果我的电脑进入睡眠状态几个小时,然后醒来,我会收到一条HTTP错误,上面写着“无法找到服务器”。服务器一直在运行,所以这不是真正的问题。我怀疑真正的原因是,由于计时器回调在睡眠期间错过了它的“时间段”,它变得“过期”并在唤醒后立即执行,而无需等待PC重新建立Internet连接。我可以通过在回调开始时添加 Thread.Sleep(5000)来解决问题,但这有点像kludge(建立Internet连接可能需要更长时间)。我的问题:

  1. 从睡眠模式唤醒后,Win确实需要几秒钟才能重新建立Internet连接吗?我的连接是DSL,“永远在线”。

  2. 是否存在C#系统调用,等待Win建立Internet连接(如果在20秒内没有发生这种情况,则会超时)?

  3. 编辑:刚刚发现:Check Net connection in C#。不像我希望的那么简单,它需要一系列检查:任何 LAN连接,DNS查找(LAN外),ping服务器(检查特定服务器)。

2 个答案:

答案 0 :(得分:2)

1)是的 2)例如,您可以通过WMI检查各种连接属性。请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/aa394595%28v=vs.85%29.aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa394216%28v=vs.85%29.aspx 在尝试查询之前确保您有连接。

答案 1 :(得分:1)

我认为你不应该为WMI等打扰。

如果您无法访问网络,请将计时器设置为在minuts而不是20中触发。您可以使用等待机制,重新使用它不会显得很笨拙。