2016-12-13 1 views
0

저는 C# 및 프로그래밍 전반에 대해 상당히 새롭습니다. Ping(). 지연 원인 보내기

나는 내가 연결 문제가있을 때 쉽게 알 수 있도록 큰 웹 사이트의 몇 가지에 대한 핑 시간을 측정하는 것입니다 작은 응용 프로그램을 만들기로 결정 ... 지금 내 문제는 때마다 프로그램이를 보내는 것입니다 ping 요청은 전체 프로그램이 멈추고 종종 중단됩니다.

long Google = new Ping().Send("google.com").RoundtripTime; 
+0

동기식으로 호출하기 때문에 비동기 메서드를 사용합니다. - https://msdn.microsoft.com/en-us/library/ms144961(v=vs.110).aspx – Lloyd

답변

2

만일 응용 프로그램을 ping 요청이 사용자 인터페이스를 표시 동일한 스레드에서 수행되고 있기 때문에 :

내가 사용하고있는 코드입니다. 따라서 응용 프로그램은 다른 작업을 계속 수행하기 전에 핑의 응답을 기다리고 있습니다. ping이 응답하는 데 시간이 오래 걸리면 응용 프로그램이 잠긴 상태에있을 시간이 길어집니다.

당신이 Ping.Async() 방법을 사용하여로 전환하면, 실제 핑 요청이 백그라운드에서 수행 할 수 있으므로 같은의 UI와 INTERFER하지 :

long Google = -1; 
var ping = new Ping(); 
ping.PingCompleted += (s,a) => Google = a.Reply.RoundtripTime; 
ping.SendAsync("google.com",null); 

그러나, 여전히해야 할 것이다 당신의 응답이 돌아 오면 응용 프로그램의 UI가 새 값으로 업데이트됩니다. 위의 예는 로컬 Google 변수를 핑 결과로 업데이트하지만 UI 스레드는 값이 변경되었음을 알 수 없습니다.

정확히 어떻게하면 프레임 워크 (Winforms, WPF, Console)가 UI에 영향을 주는지, 그리고 질문에 실제로 지정하지 않은 UI를 어떻게 설정했는지에 따라 달라집니다.

+0

나는 점점 커지는 것 같습니다. 결과적으로 1입니다. –

+0

@ JariSchockaert,이 답변은 완전한 코드가 아닙니다. ping이 이제 비동기 호출로 수행되기 때문에 코드는 결과가 반환 될 때까지 자동으로 대기하지 않으므로 -1의 초기 값은 아직 업데이트되지 않습니다. 연결된 [MSDN 페이지] (https://msdn.microsoft.com/en-us/library/ms144961(v=vs.110) .aspx)의 예는 결과를 기다리는 올바른 방법을 제공하지만 자신의 의도에 따라 최선). 대신 그 예를 따르십시오. – Adrian

관련 문제