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

.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;elsereturn 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}");}}
}

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

相关文章:

  • [CSP-J 2022] 解密
  • LeetCode 热题 100 回顾8
  • 智能红外抄表系统的设计与实现(论文+源码)_kaic
  • iTextPDF中,要实现表格中的内容在数据长度超过边框时自动换行
  • 组合优化与凸优化 学习笔记5 对偶拉格朗日函数
  • 开放原子开源基金会网站上的开源项目Opns存在缓冲区溢出缺陷
  • 设计模式之模版方法模式
  • 【Linux系列】CMA (Contiguous Memory Allocator) 简单介绍
  • 【QT Quick】基础语法:基础类与控件
  • 【分页】Spring Boot 列表分页 + javaScript前台展示
  • 程序员如何提升并保持核心竞争力?——深入钻研、广泛学习与软技能的培养
  • Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录
  • python自动更新chromedriver
  • swiper+fixed的错误,splice函数的使用,提取年月日substring
  • [每日一练]利用自连接实现数量查询
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • CentOS 7 修改主机名
  • co模块的前端实现
  • css选择器
  • ES10 特性的完整指南
  • java8-模拟hadoop
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue2.0 实现互斥
  • WebSocket使用
  • 关于springcloud Gateway中的限流
  • 漂亮刷新控件-iOS
  • 前端技术周刊 2019-02-11 Serverless
  • 一些关于Rust在2019年的思考
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #stm32整理(一)flash读写
  • (42)STM32——LCD显示屏实验笔记
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (七)理解angular中的module和injector,即依赖注入
  • (十) 初识 Docker file
  • (四)模仿学习-完成后台管理页面查询
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)Linux+Windows下安装ffmpeg
  • (转)visual stdio 书签功能介绍
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • 、写入Shellcode到注册表上线
  • .NET 4.0中的泛型协变和反变
  • .NET delegate 委托 、 Event 事件
  • .Net 基于IIS部署blazor webassembly或WebApi
  • .NET 设计模式初探
  • .NET 依赖注入和配置系统
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET8使用VS2022打包Docker镜像
  • .net连接oracle数据库
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @Conditional注解详解
  • @ConfigurationProperties注解对数据的自动封装
  • @TableLogic注解说明,以及对增删改查的影响