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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【课程学习】Wireless Communications

Goldsmith A. Wireless communications[M]. Cambridge university press, 2005. Wireless Communications 无线通信课程 文章目录 2-Path Loss, Shadowing, and Multipath2.4-Two-Ray Multipath Model时延扩展 delay spread P33 3-Statistical Multipath Channel Models3.3-Wid…

一站式大语言模型API调用:快速上手教程

智匠MindCraft是一个强大的AI工具及开发平台&#xff0c;支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型&#xff0c;帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网&#xff0c;注册并登录账号。 进入开发者平台&…

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…

Cpp::STL—string类的使用与理解(上)(8)

文章目录 前言一、string类对象的构造函数string()string(const char* s)string(size_t n, char c)string(const string& s)string(const string& str&#xff0c;size_t pos&#xff0c;size_t len npos) 二、string类对象的容量操作size与lengthcapacitycapacity返回…

缓存穿透、击穿、雪崩及解决方案

在分布式系统中&#xff0c;尤其是使用缓存的系统中&#xff0c;缓存雪崩、缓存穿透和缓存击穿是常见的问题。下面详细说明这三者的定义和解决方案&#xff1a; 1. 缓存穿透 定义&#xff1a;缓存穿透是指请求的数据在缓存和数据库中都不存在。由于每次请求都会直接查询数据库…

Docekrfile和docker compose编写指南及注意事项

Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来&#xff0c;之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令&#xff1a;docker build /path -t imageName:tag 注意&#xff0c;docker build后的path必须是dockerfile…

阿里云对象存储OSS 速学

目录 1.创建一个Bucket 2.创建密钥AccessKey 3.在文档中心打开阿里云对象存储OSS 4.参考上传文件示例 以官网的文档为主&#xff0c;我的文章教学为辅 官网有详细的视频介绍&#xff1a; OSS快速入门_对象存储(OSS)-阿里云帮助中心 (aliyun.com)https://help.aliyun.com/…

25考研咨询周开启,西安电子科技大学是否改考408??

学长这几天帮大家问了西安电子科技大学是否会从833、834、953改考为408&#xff1f; 西电老师回复&#xff1a;根据上级文件要求&#xff0c;招生简章以及专业目录会在网上报名开始前公布&#xff0c;专业课不会又大变动&#xff01; 因为大家安心复习即可&#xff0c;保证今…

java解决跨域问题时的403报错

什么是跨域问题&#xff1f; 当一个请求的url的协议&#xff0c;域名&#xff0c;端口三者之间任意一个与当前页面url不同 即为跨域 问题背景&#xff1a; 如图&#xff0c;前端端口为8090&#xff0c;而后端端口为8099&#xff0c;形成跨域&#xff0c;无法对接 试图利用Spr…

【数据库】数据库课程设计mysql

数据库课程设计MySQL是一个涉及多方面内容的综合性项目&#xff0c;旨在通过实践加深对MySQL数据库的理解和应用。以下是一个基于MySQL的数据库课程设计概览&#xff0c;包括设计步骤、关键技术和操作示例。 一、数据库设计步骤 需求分析&#xff1a; 确定系统的功能需求和数据…

爬虫——爬取小音乐网站

爬虫有几部分功能&#xff1f;&#xff1f;&#xff1f; 1.发请求&#xff0c;获得网页源码 #1.和2是在一步的 发请求成功了之后就能直接获得网页源码 2.解析我们想要的数据 3.按照需求保存 注意&#xff1a;开始爬虫前&#xff0c;需要给其封装 headers {User-…

卫生间门口墙皮天天掉,是墙面“返潮”造成的?

业主说房子装修好5年了&#xff0c;卫生间防水出问题了&#xff0c;去现场看一下&#xff0c;看看能怎么处理。      到了工地以后&#xff0c;业主说卫生间门口两侧的墙皮都已经脱落了&#xff0c;天天往下掉&#xff0c;实在没办法了&#xff0c;就在墙上钉了几块纸壳子。…

linux基础指令的认识

在正式学习linux前&#xff0c;可以简单认识一下linux与win的区别 win&#xff1a;是图形界面&#xff0c;用户操作更简单&#xff1b;在刚开始win也是黑屏终端 指令操作&#xff0c;图形界面就是历史发展的结果。Linux&#xff1a;也存在图形界面比如desktop OS&#xff1b;但…

Ubuntu24.04桌面版下的网络管理

systemd-networkd组件 注意&#xff1a;systemd-network和NetworkManager组件两者冲突 使用systemd-networkd之前&#xff0c;需要先关闭其他网络管理器&#xff0c;如NetworkManager, netctl&#xff0c;dhcp daemon&#xff0c;dhcpcd, dhclient等 systemctl stop NetworkM…

【C++】模拟实现红黑树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现RBTreeNode类模板 &#x1f38f;构造RBTreeNode类成员变量 &#x1f38f;实现RBTreeNode类构…

Flutter modal_bottom_sheet 库:介绍与使用指南

Flutter的官方showModalBottomSheet方法虽然功能强大&#xff0c;但在某些场景下可能不够灵活。为了解决这个问题&#xff0c;社区提供了一个非常实用的第三方库——modal_bottom_sheet。这个库扩展了官方的ModalBottomSheet功能&#xff0c;提供了更多的自定义选项和更丰富的用…

异常场景分析

优质博文&#xff1a;IT-BLOG-CN 为了防止黑客从前台异常信息&#xff0c;对系统进行攻击。同时&#xff0c;为了提高用户体验&#xff0c;我们都会都抛出的异常进行拦截处理。 一、异常处理类 Java把异常当做是破坏正常流程的一个事件&#xff0c;当事件发生后&#xff0c;…

C 语言预处理详解:从宏替换到条件编译

目录&#xff1a; 前言1. 什么是预处理&#xff1f;2. 头文件展开3. 去注释4. 宏替换4.1 什么是宏&#xff1f;4.2 宏的作用范围4.3 使用宏的小Tips4.4 # 和 ##4.5 宏替换 vs 去注释 5. 条件编译5.1 什么是条件编译&#xff1f;5.2 条件编译的使用5.3 条件编译的作用 总结 前言…

什么是区块链桥?

什么是区块链桥&#xff1f; 区块链桥是一种实现资产从一个区块链转移至另一个区块链的工具&#xff0c;它解决了区块链技术中不同网络之间缺乏互操作性的问题。区块链桥通过创建代表另一区块链资产的合成衍生品&#xff0c;使得原本互不兼容的区块链资产能够相互连接和转移。…

Spring Boot新闻推荐:实时数据处理

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…