我有一台 PC 每 5 分钟断开一次 Internet 连接。 (很长一段时间解释为什么)。
在后台,我每 10 分钟运行一个 C# 计时器,它会做一些非常简单的事情:
WebBrowser bobo = new WebBrowser();
bobo.Navigate(url);
while(bobo.ReadyState != WebBrowserReadyState.Complete){Application.DoEvents();}
string responsestring = bobo.DocumentText.ToString();
bobo.Dispose();
// and then do some stuff with responsestring
确保 bobo webbrowser DID 在加载页面时有 Internet 连接是非常重要的。我该怎么做?
我试过“try-catch”语句,但在没有互联网时它不会抛出异常。
我想过做“loading complete”处理程序,但它会使我的程序非常复杂并且占用太多内存,所以寻找其他方法。
我最新的解决方案是:
...
while(bobo.ReadyState != WebBrowserReadyState.Complete){Application.DoEvents();}
if (bobo.DocumentTitle == "Navigation Canceled"){throw new DivideByZeroException();}
...
它适用于 bobo 浏览器。 但是当我使用 responsestring 时 - 我创建了许多其他浏览器(一个接一个) - 而这个解决方案在那里不起作用。
还有什么我没有提到的其他测试吗?
找到的解决方案:
非常感谢。
我没有使用您的解决方案(它在连接关闭几秒钟后返回 TRUE)。
但我发现了这个:
[DllImport("wininet.dll", SetLastError = true)]
static extern bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);
public static bool CanConnectToURL(string url)
{
return InternetCheckConnection(url, 1, 0);
}
它直接向 URL 发送 PING,如果收到应答则返回 TRUE,否则返回 FALSE。完美运行。
请您参考如下方法:
发件人:check whether Internet connection is available with C#
using System;
using System.Runtime;
using System.Runtime.InteropServices;
public class InternetCS
{
//Creating the extern function...
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState( out int Description, int ReservedValue );
//Creating a function that uses the API function...
public static bool IsConnectedToInternet( )
{
int Desc ;
return InternetGetConnectedState( out Desc, 0 ) ;
}
}
您还可以 ping 您的 ISP 的 DNS 服务器,看看是否可以访问它们,SO 上有人说 Windows ping microsoft.com 以查看您的互联网是否正常。
