Ваш замерзает приложений, так как запрос пинг выполняется на том же потоке, который отображает ваш пользовательский интерфейс. Таким образом, приложение ожидает ответа на запрос ping, прежде чем он сможет продолжить выполнение других действий. Чем дольше ответит пинг, тем дольше приложение будет находиться в заблокированном состоянии.
При переключении с использованием метода Ping.Async()
, фактический запрос Ping можно сделать в фоновом режиме и, следовательно, не INTERFER с пользовательским интерфейсом, например, так:
long Google = -1;
var ping = new Ping();
ping.PingCompleted += (s,a) => Google = a.Reply.RoundtripTime;
ping.SendAsync("google.com",null);
Однако, вам все равно придется сделать свой приложение обновляет свой интерфейс с новым значением, когда возвращается ответ. В приведенном выше примере только обновляется локальная переменная Google
с результатом ping, но ваш поток пользовательского интерфейса не будет знать, что значение было изменено.
Как именно вы это сделаете, это будет зависеть от того, какая инфраструктура (Winforms, WPF, Console) включает ваш пользовательский интерфейс и как вы настроили свой пользовательский интерфейс, который вы на самом деле не задали в своем вопросе.
Это потому, что вы вызываете его синхронно, используйте метод async - https://msdn.microsoft.com/en-us/library/ms144961(v=vs.110).aspx – Lloyd