3
我建立一個簡單的應用程序偵聽NetworkAvailibilityChanged事件。這一切都很好,除了調制解調器PPP接口連接的情況外,應用程序只有在網絡連接但不連接時才通知可用性。檢查網絡連接
我錯過了什麼?我嘗試了它的局域網,它的工作完美。
我建立一個簡單的應用程序偵聽NetworkAvailibilityChanged事件。這一切都很好,除了調制解調器PPP接口連接的情況外,應用程序只有在網絡連接但不連接時才通知可用性。檢查網絡連接
我錯過了什麼?我嘗試了它的局域網,它的工作完美。
這裏是NetworkAvailbilityChanged倒是什麼。
Friend Shared Function InternalGetIsNetworkAvailable() As Boolean
If ComNetOS.IsWinNt Then
Dim interface2 As NetworkInterface
For Each interface2 In SystemNetworkInterface.GetNetworkInterfaces
If (((interface2.OperationalStatus = OperationalStatus.Up) AndAlso (interface2.NetworkInterfaceType <> NetworkInterfaceType.Tunnel)) AndAlso (interface2.NetworkInterfaceType <> NetworkInterfaceType.Loopback)) Then
Return True
End If
Next
Return False
End If
Dim flags As UInt32 = 0
Return UnsafeWinINetNativeMethods.InternetGetConnectedState((flags), 0)
End Function
Private Shared Sub ChangedAddress(ByVal sender As Object, ByVal eventArgs As EventArgs)
SyncLock AvailabilityChangeListener.syncObject
Dim isNetworkAvailable As Boolean = SystemNetworkInterface.InternalGetIsNetworkAvailable
If (isNetworkAvailable <> AvailabilityChangeListener.isAvailable) Then
AvailabilityChangeListener.isAvailable = isNetworkAvailable
Dim array As DictionaryEntry() = New DictionaryEntry(AvailabilityChangeListener.s_availabilityCallerArray.Count - 1) {}
AvailabilityChangeListener.s_availabilityCallerArray.CopyTo(array, 0)
Dim i As Integer
For i = 0 To array.Length - 1
Dim key As NetworkAvailabilityChangedEventHandler = DirectCast(array(i).Key, NetworkAvailabilityChangedEventHandler)
Dim context As ExecutionContext = DirectCast(array(i).Value, ExecutionContext)
If (context Is Nothing) Then
key.Invoke(Nothing, New NetworkAvailabilityEventArgs(AvailabilityChangeListener.isAvailable))
Else
ExecutionContext.Run(context.CreateCopy, AvailabilityChangeListener.s_RunHandlerCallback, key)
End If
Next i
End If
End SyncLock
End Sub
根據這些看來,如果它告訴你那裏是網絡,它也應該告訴你沒有網絡。它似乎也適用於每個設備的地址。當地址改變時,它調用ChangedAddress。
看看這,看看你是怎麼回事幕後的更清晰的畫面。
thanx的職位,代碼是很好的和明確的,但我看到,它需要一些本地通話並沒有用,沒有問題,因爲我已經通過互操作與SENS架構解決了這個問題以類似的方式和在COM +事件系統,奇怪的是在.NET函數我談了一些測試後,似乎只有當你在應用程序運行的瞬間連接,然後它檢測到斷線調制解調器工作,但如果u再次連接和disconn。它不會.. !!!但在局域網有一些延遲的情況下可以正常工作,無論如何再次感謝AB – 2010-09-16 00:12:04