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

.NET中是否存在可感知主机网络连接状态变化的观察者组件?

.NET中的网络连接状态监听方案

当然有啦!在.NET生态里,有几种原生的方案可以帮你监听网络连接的建立与断开状态,不用额外找第三方组件。下面我给你详细拆解下:

1. 最直接的原生事件:NetworkChange类

不管是.NET Framework还是较新的.NET Core/.NET 5+,都自带了System.Net.NetworkInformation.NetworkChange类,专门用来监听网络状态变化。它提供了两个核心事件:

  • NetworkAvailabilityChanged:当系统的网络可用性整体变化时触发(比如从无网到有网,或者反过来)
  • NetworkAddressChanged:当网络接口的地址发生变化时触发(比如IP地址更新,通常也伴随连接状态变化)

给你个快速上手的代码示例:

using System;
using System.Net.NetworkInformation;

class NetworkMonitor
{
    static void Main()
    {
        // 注册监听事件
        NetworkChange.NetworkAvailabilityChanged += OnNetworkAvailabilityChanged;
        NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged;

        Console.WriteLine("正在监听网络状态变化,按任意键退出...");
        Console.ReadKey();
    }

    private static void OnNetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
    {
        if (e.IsAvailable)
        {
            Console.WriteLine("✅ 互联网连接已建立");
        }
        else
        {
            Console.WriteLine("❌ 互联网连接已断开");
        }
    }

    private static void OnNetworkAddressChanged(object sender, EventArgs e)
    {
        Console.WriteLine("🔄 网络地址发生变化,建议检查连接状态");
    }
}

注意事项

不过要提醒你:NetworkAvailabilityChanged只是判断系统是否有可用的网络接口,不一定代表真的能访问互联网(比如接口连上了路由器但路由器没联网)。如果需要精准判断是否能访问外网,可以在事件触发后做个轻量验证。

2. 补充:精准验证互联网连通性

如果需要确认设备真的能访问互联网,可以在事件回调里加个简单的检测逻辑,比如请求一个可靠的测试地址:

private static bool IsActuallyConnectedToInternet()
{
    try
    {
        // 微软的连通性测试地址,返回简单文本
        using var httpClient = new System.Net.Http.HttpClient { Timeout = TimeSpan.FromSeconds(5) };
        var response = httpClient.GetAsync("http://www.msftconnecttest.com/connecttest.txt").Result;
        return response.IsSuccessStatusCode;
    }
    catch (Exception)
    {
        return false;
    }
}

你可以把这个方法加到OnNetworkAvailabilityChanged里,比如当e.IsAvailable为true时,再调用这个方法做二次确认,这样结果会更准确。

3. 针对.NET Core/.NET 5+的额外说明

在较新的.NET版本里,除了NetworkChange,你也可以通过NetworkInterface.GetAllNetworkInterfaces()定期扫描网络接口状态,但这种轮询方式效率不如事件驱动,所以更推荐用NetworkChange的事件监听方案。

总结一下:这些都是.NET原生支持的方案,足够满足你监听网络连接状态变化的需求,不需要额外引入第三方库。

内容的提问来源于stack exchange,提问作者RoK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:40