2

我的电脑每 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”语句,但是没有互联网时它不会抛出异常。

我想过做“加载完成”的处理程序,但是它会使我的程序非常复杂并且使用太多的内存,所以寻找其他方法。

我最新的解决方案是:

...
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。完美运行。

4

1 回答 1

0

From:用 C# 检查 Internet 连接是否可用

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 以查看您的 Internet 是否已启动。

于 2012-08-17T23:24:18.903 回答