0

在我的 winforms 应用程序中,我需要检查系统是否连接到互联网。目前我正在使用

        try
        {
            Dns.GetHostEntry("www.something.com");
            return true;
        }
        catch (Exception)
        {
            return false;
        }

但这并不适合我。如果系统没有连接到互联网(由于超时),启动应用程序需要超过两分钟。想知道是否可以使用 WMI 命令代替?

4

3 回答 3

2

如果用户使用 Dsl 调制解调器连接,我使用此类检查 Internet 连接,下面的代码无法感知 Internet 连接

NetworkInterface.GetIsNetworkAvailable()

但是这个类可以解决这个问题,

class InternetConnectionChecker
{
    private bool _connectingFlag = false;
    private Thread _th;

    #region Ping Google To Test Connect Or Disconnect
    private string Ping()
    {
        try
        {
            const string remoteMachineNameOrIP = "173.194.78.104";
            var ping = new Ping();
            var reply = ping.Send(remoteMachineNameOrIP, 5);
            var sb = new StringBuilder();
            sb.Append(reply.Status.ToString());
            return sb.ToString();
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
    }
    #endregion

    #region Connecting Cheker Thread
    private void ConCheck()
    {
        var status = Ping();
        _connectingFlag = status == "Success" || status == "TimedOut";
    }

    public bool ConnectingCheker()
    {
        _th = new Thread(ConCheck);
        _th.Start();
        return _connectingFlag;
    }
    #endregion
}

供使用 //不要忘记创建全局实例 InternetConnectionChecker

    InternetConnectionChecker _connectionChecker = new     InternetConnectionChecker();

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {           
        btn1.Content = _connectionChecker.ConnectingCheker();
    }
于 2013-05-09T06:59:20.387 回答
0

我不了解 WMI,但有一些 .NET Framework 类可以在System.Net.NetworkInformation命名空间中提供帮助。特别是,NetworkInterface.GetIsNetworkAvailable()可以告诉您网络连接(不一定与互联网)是否可用。在同一个命名空间中,Ping该类具有多个发送异步和/或具有超时参数的 ping 请求的方法。

于 2013-05-09T06:22:06.780 回答
0

我改用 wininet.dll 来解决我的问题,它就像一个魅力。

请参考此链接以了解其用法。

谢谢你们的时间。

于 2013-05-09T07:56:34.083 回答