c#计时器:系统唤醒后HTTP连接错误

c#计时器:系统唤醒后HTTP连接错误,c#,windows-7,timer,resume,wakeup,C#,Windows 7,Timer,Resume,Wakeup,我在C#应用程序(Win7 64)中有一个计时器。计时器回调每隔20分钟通过HTTP获取一些数据。它工作得很好。但是如果我的电脑进入睡眠状态几个小时,然后醒来,我会收到一个HTTP错误,说“找不到服务器”。服务器一直在运行,所以这不是真正的问题。我怀疑真正的原因是,当计时器回调在睡眠期间错过其“时间段”时,它会变得“过期”,并在唤醒后立即执行,而无需等待PC重新建立互联网连接。我可以通过在回调开始时添加一个Thread.Sleep(5000)来解决这个问题,但这有点麻烦(建立Internet连接

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

  • 从睡眠模式唤醒后,Win是否确实需要几秒钟来重新建立互联网连接?我的连接是DSL,“始终在线”

  • 是否有一个C#系统调用将等待Win建立互联网连接(或者如果在20秒内没有发生,则超时)

  • 编辑:刚刚找到此:。不像我希望的那么简单,它需要一系列检查:任何局域网连接、DNS查找(局域网外)、ping服务器(检查特定服务器)。

    1)是 2) 例如,您可以通过WMI检查各种连接属性。见: 和
    在尝试查询之前确保您已建立连接。

    我认为您不应该为WMI之类的问题而烦恼


    如果无法访问网络,请将计时器设置为在一分钟内启动,而不是20分钟。您可能有一个等待机制,重复使用它不会显得很困难。

    如果找不到服务器,请在短时间超时后再试一次?我希望我能分辨出以下两种情况之间的区别:1)服务器真的停机(用户收到错误消息),2)没有网络连接(在系统唤醒之后):在网络连接存在之前,不要检查服务器(也不要打扰用户)。