You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测特定网络适配器的连接/断开/禁用状态(无需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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:36:11