2011-12-04 1 views
0

대상 프레임 워크가 3.5에서 4.0으로 변경되었습니다. 다른 변경 사항은 없습니다. 4.0과 함께 3.5로 작업 한 간단한 ping은 Canceled = True를 제공합니다. 어떤 아이디어가 이것을 일으킬 수 있습니까?NetworkInformation.Ping(), .NET 4.0에서는 결과가 취소되었지만 (3.5에서는 적용되지 않음)

Public Sub StartInternetConnectionCheckEvery(ByVal seconds As Integer) 
    Dim timer As New Timer() 
    timer.Interval = seconds * 1000 
    AddHandler timer.Tick, AddressOf CheckIsConnectedToInternet 
    timer.Start() 
End Sub 

Private Sub CheckIsConnectedToInternetByTimer(ByVal sender As Object, ByVal e As System.EventArgs) 
    CheckIsConnectedToInternet() 
End Sub 

Public Sub CheckIsConnectedToInternet() 
    Using ping As New System.Net.NetworkInformation.Ping() 
     Dim address As String = "www.google.com" 

     ping.SendAsync(address, Nothing) 
     AddHandler ping.PingCompleted, AddressOf OnPingResult 
    End Using 
End Sub 

Private Sub OnPingResult(ByVal sender As Object, ByVal e As PingCompletedEventArgs) 
    If e.Cancelled Then 
     Trace.WriteLine("InternetHelper: Ping Cancelled") 
     Return 
    End If 

    IsConnectedToInternet = (e.Reply.Status = IPStatus.Success) 
    RaiseEvent InternetPingResult(IsConnectedToInternet) 
End Sub 
+0

천천히, 그러나 확실하게, 더 많은 대형 사이트가 핑에 응답하지 않습니다을 깰 수있는 방법 그렇지 않으면 좋은 데모. 그것은 당신의 코드에서 오류가 아니라 생각할 것이 있습니다. – dbasnett

답변

1
Using ping As New System.Net.NetworkInformation.Ping() 
    '' etc 
End Using 

예 이 잘 작동하지 않을. 비동기 전송을 완료하기 전에 ping 객체를 삭제합니다. Ping 클래스가 Dispose() 메서드를 제대로 구현하지 않았기 때문에 이전에이 문제가 발생했습니다. 닷넷 4에서는 피드백 보고서 is here이 수정되었습니다.

수정 사항은 간단하며을 (를) 사용하여 제거하십시오. 제대로 처리하지 않으면 비동기 적으로 사용하는 것이 쉽지 않습니다. 이벤트에서 사용해 보시거나 신경 쓰지 마세요.

프레임 워크 버그 수정 작업 코드 :

+0

감사! OnPingResult 메서드에서 처리하기 위해 ping.SendAsync 호출에서 ping 인스턴스를 토큰 매개 변수로 보낼 수 있습니까? – bretddog

+0

간단하게 작성하여 수업의 현장으로 만드십시오. –

관련 문제