Ihre Anwendung friert, weil die Ping-Anfrage auf dem gleichen Thread ausgeführt wird, die Benutzeroberfläche anzeigt. Die Anwendung wartet daher darauf, dass die Antwort des Ping empfangen wird, bevor sie mit anderen Dingen fortfahren kann. Je länger es dauert, bis der Ping antwortet, desto länger ist die Anwendung in einem gesperrten Zustand.
Wenn Sie mit der Ping.Async()
Methode wechseln, kann die tatsächliche Ping-Anforderung im Hintergrund durchgeführt werden und daher nicht mit dem UI interferieren, etwa so:
long Google = -1;
var ping = new Ping();
ping.PingCompleted += (s,a) => Google = a.Reply.RoundtripTime;
ping.SendAsync("google.com",null);
Allerdings werden Sie immer noch Ihre machen müssen Anwendung aktualisieren ihre Benutzeroberfläche mit dem neuen Wert, wenn die Antwort zurückkommt. Das obige Beispiel wird nur die lokale Google
Variable mit dem Ergebnis des Ping aktualisieren, aber Ihr UI-Thread wird nicht wissen, dass der Wert geändert wurde.
Wie genau Sie das tun, hängt ein wenig davon ab, welches Framework (Winforms, WPF, Console) Ihre Benutzeroberfläche betreibt und wie Sie Ihre UI eingerichtet haben, die Sie in Ihrer Frage nicht wirklich angegeben haben.
Das ist, weil Sie es synchron aufrufen, verwenden Sie die Async-Methode - https://msdn.microsoft.com/en-us/library/ms144961(v=vs.110).aspx – Lloyd