2013-05-09 66 views
0

在我的winforms應用程序中,我需要檢查系統是否連接到互聯網。 目前我使用如何使用WMI命令檢查系統是否連接到Internet?

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

但這並不削減對我來說。如果系統未連接到互聯網(由於超時),啓動應用程序需要兩分多鐘。 想知道是否可以使用WMI命令?

回答

0

我不知道WMI,但有一些.NET Framework類可以在System.Net.NetworkInformation命名空間中提供幫助。特別是,NetworkInterface.GetIsNetworkAvailable()可以告訴你,如果網絡連接(不一定與互聯網)可用。在相同的命名空間中,Ping類有幾種用於發送異步ping請求和/或具有超時參數的方法。

2

我使用這個類檢查Internet連接 如果用戶使用DSL調制解調器連接,下面的代碼不能感知互聯網連接

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(); 
    }