平台:WPF (.NET 4.5)。
为了尽可能快地检查 Internet 连接,我使用了这个功能:
[DllImport("wininet.dll")]
public extern static bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);
问题是,如果我连接到 Internet 并且我的程序正在执行InternetCheckConnection
,它会返回true(如预期的那样)但是如果我让程序休眠一会儿并且在此期间我断开计算机与 Internet 的连接,然后我再次检查连接,比我还真返回!
为什么?!
我准备了出现问题的代码:
using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace InternetCheckConnectionTest
{
class Program
{
[DllImport("wininet.dll")]
public extern static bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);
static void Main(string[] args)
{
string www = "http://www.google.com/";
Console.WriteLine("Checking connection...");
bool connected = InternetCheckConnection(www, 1, 0);
Console.WriteLine("Connection check returned " + connected.ToString());
TimeSpan ts = new TimeSpan(0, 0, 20);
Console.WriteLine("\nYou have " + ts.TotalSeconds.ToString() + " seconds to (dis)connect from/to the Internet.\n");
Thread.Sleep(ts);
Console.WriteLine("Checking connection once again...");
connected = InternetCheckConnection(www, 1, 0);
Console.WriteLine("Connection (2nd) check returned " + connected.ToString());
}
}
}
在启动此程序之前,请确保您已连接到 Internet。
在此消息之后:
您有 20 秒的时间(断开)与 Internet 的连接。
断开与 Internet 的连接。即使您与 Internet 断开连接,您也会看到InternetCheckConnection(www, 1, 0)
返回True 。问题是为什么?