我的目标是检测以太网电缆何时断开连接我正在尝试使用
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");
}
}
NetworkAvailabilityChanged 基于 NetworkInterface.GetIsNetworkAvailable(),其中规定:
如果任何网络接口标记为“启动”并且不是环回或隧道接口,则认为网络连接可用。
因此,如果有多个 NIC,并且存在满足这些条件的第二个 NIC(有线或无线),则拔下电缆时 NetworkAddressChanged 将不会触发。
虽然有点晚了,但我发布此内容是为了帮助其他遇到类似情况的人。
环境:Windows 11操作系统/笔记本电脑 项目:C# WPF .NET Framework 4.8
就我而言,问题是由“Windows Sandbox”引起的。即使我的实际网络连接已关闭,Hyper-V 虚拟以太网适配器下仍会出现一个名为“vEthernet(默认交换机)”的新网络属性,显示网络状态为已连接。这意味着 NetworkAvailabilityChangedEventHandler 未检测活动连接的状态。最初,我通过重新启动解决了这个问题,但最终改用 NetworkInterface.GetAllNetworkInterfaces() 来检查状态。