1

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

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

  2. 是否有一个 C# 系统调用会等到 Win 建立 Internet 连接(或者如果这在 20 秒内没有发生,则超时)?

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

4

2 回答 2

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 以确保在尝试查询之前已建立连接。

于 2011-11-27T03:46:58.560 回答
1

我认为您不应该为 WMI 等而烦恼。

如果您无法访问网络,请将计时器设置为在几分钟内而不是 20 分钟内触发。您已经有一个等待机制,重复使用它不会显得笨拙。

于 2011-11-27T04:42:32.773 回答