Wie kann ich prüfen, ob der Rechner, auf dem meine Software läuft, gerade über eine Internetverbindung verfügt? Klar, ich kann irgendwie einen Ping auf einen Server loslassen und schauen, was zurückkommt. Aber da muss es doch eine professionellere Lösung geben, oder?
Gehe einfach davon aus, dass eine Internetverbindung besteht und nutze sie wofür auch immer du sie brauchst. Wenn der entsprechende Vorgang fehlschlägt, zeigst du eine Fehlermeldung an oder behandelst den Fall entsprechend geeignet anders. Da kommst du eh nicht drumherum, selbst wenn du vorher wüsstest, ob eine Internetverbindung besteht oder nicht.
Und wenn dein Programm aus welchen Gründen auch immer einen speziellen "Offline"-Modus braucht, in dem eben gerade nicht versucht werden soll, eine Internetverbindung zu nutzen, dann baue diesen Modus explizit ein und lass den Benutzer ihn aktivieren und deaktivieren, weil er es halt am besten weiß.
Diese Grundidee kann man dann je nach Anwendungsfall unterschiedlich komfortabel ausgestalten. (Beispiel 1: "Der Vorgang 'ABC' schlug fehl. Möchten Sie offline arbeiten?" / Beispiel 2: "Sie haben das Programm beim letzten mal im Offline-Modus verlassen, möchten Sie jetzt online arbeiten?")
Machen etliche andere Programme auch so, die es sicher anders machen würden, wenn es gehen würde. (Prominente Beispiele: MS Outlook, Mozilla Firefox und viele andere mehr!)
Fazit: Internetverbindung vorhanden? Juckt dich nicht (wirklich)!
Möglicherweise hilft Dir die Klasse NetworkChange weiter. Aber 100% Zuverlässigkeit solltest Du nicht erwarten und die Aussagekraft der beiden Events, die darin bereitgestellt werden, nicht überbewerten - siehe die von m.fuchs verlinkte Geschichte.
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef dwFlags As Integer, ByVal dwReserved As Integer) As Integer
Public Function InternetConnection() As Boolean
Dim flags As Integer = 0 Dim inet As Integer = InternetGetConnectedState(flags, 0) If inet = 1 Then Return True ElseIf inet = 0 Then Return False End If
Wir nutzen diese Methode (allerdings in C#), ist sehr zuverlässig!
Einziges Problem, dass wir bisher hatten: Beim UMTS-Sticks, die im Netz sind, aber kein Kontingent mehr haben. Gibt es ein "True", obwohl keine Verbindung besteht.