C# NetworkAvailibilityChanged 在断开连接时不会触发

问题描述 投票:0回答:2

我的目标是检测以太网电缆何时断开连接我正在尝试使用

NetworkChange
类,但当我拔下以太网电缆时,事件
NetworkAvailibilityChanged
不会触发。
NetworkAddressChanged
确实会在大约 8 秒内触发,但
NetworkAvailibilityChanged
永远不会触发,我有什么遗漏吗?

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);
            NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
        }

        void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
        {
            Console.WriteLine("NetworkChange_NetworkAvailabilityChanged");
        }

        void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
        {
            Console.WriteLine("NetworkChange_NetworkAddressChanged");
        }


    }
c# winforms
2个回答
2
投票

NetworkAvailabilityChanged 基于 NetworkInterface.GetIsNetworkAvailable(),其中规定:

如果任何网络接口标记为“启动”并且不是环回或隧道接口,则认为网络连接可用。

因此,如果有多个 NIC,并且存在满足这些条件的第二个 NIC(有线或无线),则拔下电缆时 NetworkAddressChanged 将不会触发。


0
投票

虽然有点晚了,但我发布此内容是为了帮助其他遇到类似情况的人。

环境:Windows 11操作系统/笔记本电脑 项目:C# WPF .NET Framework 4.8

就我而言,问题是由“Windows Sandbox”引起的。即使我的实际网络连接已关闭,Hyper-V 虚拟以太网适配器下仍会出现一个名为“vEthernet(默认交换机)”的新网络属性,显示网络状态为已连接。这意味着 NetworkAvailabilityChangedEventHandler 未检测活动连接的状态。最初,我通过重新启动解决了这个问题,但最终改用 NetworkInterface.GetAllNetworkInterfaces() 来检查状态。

© www.soinside.com 2019 - 2024. All rights reserved.