网络电缆拔出时不会触发Outlook加载项中使用的NetworkChange.NetworkAvailabilityChanged

时间:2016-07-21 16:28:53

标签: vb.net outlook-addin

我有一个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网络计算机。不过,我宁可不诉诸于此。

1 个答案:

答案 0 :(得分:0)

我想我可能已回答了我自己的问题。我有多个网络适配器,包括一些虚拟机。只要它们中的任何一个都启动,拔掉我的实际网络什么都不做。一旦我禁用了所有其他适配器,拔掉我的主网络连接就会导致NetworkAvailabilityChanged触发。