当前位置: 首页 > article >正文

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态,判断是否可以访问互联网。传送门:获取本机网络状态

这次我们监听网络状态切换,具体代码如下:

public class WindowsNetworkHelper
{
    private static Action<bool>? _NetworkStatusChangedCallback;

    /// <summary>
    /// 检查当前网络是否可访问互联网、并设置网络状态变更回调
    /// </summary>
    /// <param name="networkStatusChangedCallback"></param>
    /// <returns>true-可访问互联网;false-不可访问互联网</returns>
    public static bool CheckInternetAccessAndSetNetworkStatusChangedCallback(Action<bool> networkStatusChangedCallback)
    {
        //幅值
        _NetworkStatusChangedCallback = networkStatusChangedCallback;
        //注册网络状态变更事件
        NetworkInformation.NetworkStatusChanged -= NetworkInformation_NetworkStatusChanged;
        NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged;
        //返回当前网络状态
        return CheckInternetAccess();
    }

    private static void NetworkInformation_NetworkStatusChanged(object sender)
    {
        //网络状态变化,获取一次当前网络状态
        var bInternetAccess = CheckInternetAccess();
        //触发回调,把网络状态作为参数传入
        _NetworkStatusChangedCallback?.Invoke(bInternetAccess);
    }

    public static bool CheckInternetAccess()
    {
        var connectProfile = NetworkInformation.GetInternetConnectionProfile();
        if (null == connectProfile) return false;
        var networkLevel = connectProfile.GetNetworkConnectivityLevel();
        if (networkLevel == NetworkConnectivityLevel.InternetAccess)
            return true;
        else
            return false;
    }
}

调用方式:

using System;
using System.Diagnostics;
using System.Management;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using Windows.Networking.Connectivity;

namespace ConsoleApp3
{
    internal class Program
    {
        private static void Main(string[] args)
        {

            var ret = WindowsNetworkHelper.CheckInternetAccessAndSetNetworkStatusChangedCallback(NewtworkStatusChanged);
            Console.WriteLine($"宜家网络状态是否可访问互联网:{ret}");
            Console.ReadLine();
        }

        private static void NewtworkStatusChanged(bool sender)
        {
            Console.WriteLine($"当前是否可访问互联网:{sender},是否后台线程={Thread.CurrentThread.IsBackground}");
        }
    }
}

从联网到断开网络、再连上的效果:


http://www.kler.cn/news/330987.html

相关文章:

  • RISC-V开发 linux下GCC编译自定义指令流程笔记
  • 《开题报告》基于SSM框架的电影评论网站的设计与实现源码++学习文档+答辩讲解视频
  • H.264编解码 - I/P/B帧详解
  • C++七种异常处理
  • 【重学 MySQL】五十五、浮点和定点数据类型
  • 排序算法之——归并排序,计数排序
  • [rk3588 debain]cpu死锁问题解决
  • vue.js 原生js app端实现图片旋转、放大、缩小、拖拽
  • LeetCode讲解篇之5. 最长回文子串
  • 股票接口api,如何用excel获得股票实时数据
  • OpenAI 开发者大会2024
  • vue的el-button防止重复点击
  • 大厂校招:海能达嵌入式面试题及参考答案
  • Webpack 特性探讨:CDN、分包、Tree Shaking 与热更新
  • React响应式修改数组和对象
  • SQLite数据库介绍
  • MySQL那些事(InnoDB架构和存储结构)
  • 论文阅读(十一):CBAM: Convolutional Block Attention Module
  • vmvare虚拟机centos 忘记超级管理员密码怎么办?
  • 【教程】57帧! Mac电脑流畅运行黑神话悟空