2013-02-16 15 views

Odpowiedz

14

Możesz użyć NetworkInformation class, aby to wykryć; ten przykładowy kod dodaje procedurę obsługi zdarzenia, która jest wywoływana za każdym razem, gdy zmienia status połączenia;

NetworkInformation.NetworkStatusChanged += 
    NetworkInformation_NetworkStatusChanged; // Listen to connectivity changes 

static void NetworkInformation_NetworkStatusChanged(object sender) 
{ 
    ConnectionProfile profile = 
     NetworkInformation.GetInternetConnectionProfile(); 

    if (profile.GetNetworkConnectivityLevel() >= 
       NetworkConnectivityLevel.InternetAccess) 
    { 
     // We have Internet, all is golden 
    } 
} 

Oczywiście, jeśli chcesz po prostu go wykryć raz zamiast coraz powiadomiony kiedy zmienia, można po prostu zrobić czek z góry bez słuchania przypadku zmian.

+0

doskonałe, dziękuję – gurehbgui

+0

Należy również zauważyć można dostać trochę bardziej zaawansowany z tym w wykrywaniu stanów sieciowych: http://msdn.microsoft .com/en-us/library/windows/apps/hh700376 i ConstrainedInternetAccess wymienione tutaj, które mogą dawać 'pewien' poziom dostępu: http://msdn.microsoft.com/en-us/library/windows/apps/windows .networking.connectivity.networkconnectivitylevel –

+1

profil może mieć wartość null, jeśli nie ma połączenia, więc należy to sprawdzić ... –

-3

prostu napisał funkcje async to zrobić:

private void myPingCompletedCallback(object sender, PingCompletedEventArgs e) 
    { 
     if (e.Cancelled) 
      return; 

     if (e.Error != null) 
      return; 

     if (e.Reply.Status == IPStatus.Success) 
     { 
      //ok connected to internet, do something 
     } 
    } 

    private void checkInternet() 
    { 
     Ping myPing = new Ping(); 
     myPing.PingCompleted += new PingCompletedEventHandler(myPingCompletedCallback); 
     byte[] buffer = new byte[32]; 
     int timeout = 1000; 
     PingOptions options = new PingOptions(64, true); 
     try 
     { 
      myPing.SendAsync("google.com", timeout, buffer, options); 
     } 
     catch 
     { 
     } 
    } 
+1

Najgorsza odpowiedź, jaką widziałem w wielu czas koleś ... absolutnie wydajność zabójca ... –

+0

Również kod wykorzystuje klasę Ping, która nie jest dostępna dla aplikacji Windows Store, o co chodzi. – Mog0

1
using Windows.Networking.Connectivity;  

public static bool IsInternetConnected() 
{ 
    ConnectionProfile connections = NetworkInformation.GetInternetConnectionProfile(); 
    bool internet = (connections != null) && 
     (connections.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess); 
      return internet; 
} 
+1

Zastanów się nad dodaniem kontekstu do kodu, aby wyjaśnić, dlaczego twoja odpowiedź odpowiada na pytanie OP. – mdewitt

Powiązane problemy