2010-09-10 174 views
3

我建立一個簡單的應用程序偵聽NetworkAvailibilityChanged事件。這一切都很好,除了調制解調器PPP接口連接的情況外,應用程序只有在網絡連接但不連接時才通知可用性。檢查網絡連接

我錯過了什麼?我嘗試了它的局域網,它的工作完美。

回答

3

這裏是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。

看看這,看看你是怎麼回事幕後的更清晰的畫面。

+0

thanx的職位,代碼是很好的和明確的,但我看到,它需要一些本地通話並沒有用,沒有問題,因爲我已經通過互操作與SENS架構解決了這個問題以類似的方式和在COM +事件系統,奇怪的是在.NET函數我談了一些測試後,似乎只有當你在應用程序運行的瞬間連接,然後它檢測到斷線調制解調器工作,但如果u再次連接和disconn。它不會.. !!!但在局域網有一些延遲的情況下可以正常工作,無論如何再次感謝AB – 2010-09-16 00:12:04