NetworkInformation.Ping(),结果在.NET 4.0中取消(但在3.5中未取消)
我将目标框架从3.5更改为4.0,没有其他更改。一个简单的ping,使用3.5,现在使用4.0,结果是Canceled=True。你知道这是什么原因吗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
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