如何检测特定网络适配器的连接/断开/禁用状态(无需Ping外部源)
解决网络适配器状态不更新的问题
嗨,我来帮你搞定这个问题!你现在的代码有个关键问题:只在最开始的时候获取了一次NetworkInterface数组,之后循环输出的都是第一次拿到的缓存数据——哪怕网卡状态变了,旧数组里的信息也不会自动更新,所以才会一直显示Up。
给你调整一下代码,不用Ping外部源也能准确检测状态:
using System.Linq; using System.Net.NetworkInformation; using System.Threading; class NicStatusChecker { static void Main() { while (true) { // 每次循环都重新拉取最新的网卡列表,保证状态是实时的 NetworkInterface[] allNics = NetworkInterface.GetAllNetworkInterfaces(); // 这里替换成你目标网卡的名称,比如"Wi-Fi"或者"以太网",忽略大小写匹配更灵活 var targetAdapter = allNics.FirstOrDefault(nic => nic.Name.Equals("你的目标网卡名称", StringComparison.OrdinalIgnoreCase)); if (targetAdapter != null) { Console.WriteLine($"当前网卡状态: {targetAdapter.OperationalStatus}"); } else { Console.WriteLine("没找到目标网络适配器哦,检查下名称是不是写错了~"); } // 加1秒延迟,避免输出刷屏,也减少系统资源占用 Thread.Sleep(1000); } } }
几个关键点要注意:
- 实时获取网卡数据:每次循环都调用
NetworkInterface.GetAllNetworkInterfaces(),这样拿到的都是系统当前最新的网卡状态,不会再用旧缓存。 - 别硬编码索引:用网卡名称定位比写死
nics[4]靠谱多了——系统里的网卡顺序可能因为新增/删除设备变化,用名称匹配更稳定。 - 状态枚举值:
OperationalStatus会准确返回Up(已连接)、Down(已断开)、Disabled(已禁用)这些状态,完全符合你的检测需求。 - 控制检测频率:加个
Thread.Sleep可以避免程序疯狂输出,也减少不必要的系统开销。
这样修改后,不管你手动禁用网卡还是断开网络,程序都会实时显示正确的状态啦!
内容的提问来源于stack exchange,提问作者GreenSaber
相关产品推荐
相关产品推荐

