我有一个Outlook加载项,其中包含我想要修改的行为,具体取决于联网计算机是否可用。为了检查可用性,我希望在加载加载项时检查一次,然后将处理程序连接到System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged。我已经读过这个事件不区分真实的网络适配器和虚拟机的适配器等。因此,一旦事件被触发,我计划ping有问题的计算机,以验证它是否可用。
也就是说,在调试我的加载项时,断点表明事件没有触发,即使我拔下网线。我的相关代码如下:
Imports System.Net.NetworkInformation
Imports Microsoft.Win32
Public Class ThisAddIn
Private Sub ThisAddIn_Startup() Handles Me.Startup
Try
'do an initial check to see if we are online, store result
drivesAvailable = checkForExcelNetworkDrives()
'code associated with other functionality
'wire up event handlers
AddHandler NetworkChange.NetworkAvailabilityChanged, New NetworkAvailabilityChangedEventHandler(AddressOf LocalNetwork_StateChanged)
'code associated with other functionality
Catch ex As Exception
End Try
End Sub
然后,在模块(静态类)中,我有事件处理程序。
Public Sub LocalNetwork_StateChanged(sender As Object, e As NetworkAvailabilityEventArgs)
'when the network state has changed, check to see if we can still access the Excel network drives
Dim newNetworkState As Boolean = checkForExcelNetworkDrives()
'if the drive connectivity has changed, throw a new event, to warn the rest of the system to update its behavior
If newNetworkState <> drivesAvailable Then
'then call event
RaiseEvent DriveAvailabilityChanged(Nothing, New DriveAvailabilityChangedEventArgs With {.DriveAvailable = newNetworkState})
End If
'update drivesAvailable
drivesAvailable = newNetworkState
End Sub
我还没有调试我的自定义事件,因为NetworkAvailabilityChanged似乎没有被触发。这可能是因为我在Outlook加载项中使用它吗?其他事件在加载项的Load事件中连接起来,并且它们正在工作。此外,我逐步完成了AddHandler行,它似乎毫无例外地执行。
我的下一步是设置一个计时器,并定期ping网络计算机。不过,我宁可不诉诸于此。
答案 0 :(得分:0)
我想我可能已回答了我自己的问题。我有多个网络适配器,包括一些虚拟机。只要它们中的任何一个都启动,拔掉我的实际网络什么都不做。一旦我禁用了所有其他适配器,拔掉我的主网络连接就会导致NetworkAvailabilityChanged触发。