Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NetworkInformation.Ping(),结果在.NET 4.0中取消(但在3.5中未取消)_.net_Vb.net_.net 4.0_Ping - Fatal编程技术网

NetworkInformation.Ping(),结果在.NET 4.0中取消(但在3.5中未取消)

NetworkInformation.Ping(),结果在.NET 4.0中取消(但在3.5中未取消),.net,vb.net,.net-4.0,ping,.net,Vb.net,.net 4.0,Ping,我将目标框架从3.5更改为4.0,没有其他更改。一个简单的ping,使用3.5,现在使用4.0,结果是Canceled=True。你知道这是什么原因吗 Public Sub StartInternetConnectionCheckEvery(ByVal seconds As Integer) Dim timer As New Timer() timer.Interval = seconds * 1000 AddHandler timer.Tick, AddressOf C

我将目标框架从3.5更改为4.0,没有其他更改。一个简单的ping,使用3.5,现在使用4.0,结果是Canceled=True。你知道这是什么原因吗

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
是的,这不太管用。在异步发送完成之前,您正在处理ping对象。您以前没有受到影响,因为Ping类没有正确实现Dispose()方法。这在.NET4反馈报告中得到了修正

修复很简单,请使用删除。当您异步使用它时,正确地处理它并不容易。在活动中尝试一下,否则就不用麻烦了


否则,一个很好的演示框架bug修复如何破坏工作代码:)

谢谢!我可以将ping实例作为ping.SendAsync调用中的令牌参数发送到OnPingResult方法中进行处理吗?保持简单,使其成为类的一个字段。慢慢地,但肯定地,越来越多的大型站点不响应ping。这不是代码中的错误,而是需要考虑的问题。
Using ping As New System.Net.NetworkInformation.Ping()
   '' etc
End Using