2

平台: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 。问题是为什么

4

0 回答 0