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

使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(2)

接上文

使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(1)
https://blog.csdn.net/coldwind811201/article/details/147607641

1. 更新NuGet包

在这里插入图片描述
升级NuGet包后,注意相应修改前面页面上的JS引用为相应新版本的jquery JS脚本
在这里插入图片描述

2. 对前台页面进行AJAX改造

2.1 前台页面控件

将aspx上原 asp:Button 改为普通HTML的button
增加停止处理的button 最开始隐藏这个按钮 只有在点下开始处理后 显示这个停止处理的按钮 在停止后继续隐藏该按钮

<asp:Button ID="btnProcess" runat="server" Text="开始处理" /><button id="btnProcess" type="button">开始处理</button>
<button id="btnStop" type="button" style="display: none;">停止处理</button>

修改显示信息的部分 由DIV块变更为textarea组件

<textarea id="txtLog" rows="10"></textarea>

如果不进行AJAX改造,按下停止处理按钮会触发页面整体刷新,完法实现直接在当前页面上修改按钮状态,在日志栏里显示停止信息,用户交互很不友好

2.2 前台JS脚本部分

增加 connectionId 用于区分客户端

    <script type="text/javascript">$(function () {// 获取 SignalR hub 的代理var processHub = $.connection.processHub;var connectionId = "";// 启动连接$.connection.hub.start().done(function () {connectionId = $.connection.hub.id;console.log('SignalR 连接已建立');}).fail(function (error) {console.log('SignalR 连接失败: ' + error);});});</script>

增加绑定按钮JS代码 两个按钮 增加在启动连接 成功建立连接后 开始处理(#btnProcess) 停止处理 (#btnStop)

// 为 开始处理 按钮添加点击事件
$('#btnProcess').click(function () {// 禁用按钮防止重复点击,并修改按钮上的文字$(this).prop('disabled', true).text('处理中...');// 显示停止处理按钮允许用户停止处理//document.getElementById("btnStop").style.display = "inline-block";  // 或者使用 "block" 取决于你的布局需求$("#btnStop").prop('disabled', false);$("#btnStop").show();// 重置进度条//$('#progressBar').css('width', '0%').attr('aria-valuenow', 0);//$('#progressMessage').text('开始处理数据...');// 发送Ajax请求$.ajax({url: '<%= ResolveUrl("~/Default.aspx/StartProcessing") %>',type: 'POST',contentType: 'application/json; charset=utf-8',dataType: 'json',data: JSON.stringify({ connectionId: connectionId }),success: function (response) {console.log('已启动处理');},error: function (xhr, status, error) {console.error('启动失败:', error);// 启用开始处理按钮$('#btnProcess').prop('disabled', false).text('开始处理');// 隐藏停止处理按钮//document.getElementById("btnStop").style.display = "none";$("#btnStop").hide();  // 如果你使用jQuery库,代码会更简洁//$('#progressMessage').text('启动处理失败: ' + error);}});
});
// 为 停止处理 按钮 添加点击事件
$('#btnStop').click(function () {// 禁用按钮防止重复点击,并修改按钮上的文字$(this).prop('disabled', true).text('停止中...');// 发送Ajax请求$.ajax({url: '<%= ResolveUrl("~/Default.aspx/CancelProcessing") %>',type: 'POST',contentType: 'application/json; charset=utf-8',dataType: 'json',data: JSON.stringify({ connectionId: connectionId }),success: function (response) {console.log('已启动停止');},error: function (xhr, status, error) {console.error('启动停止失败:', error);}});
});

增加2个由后台调用的前台JS 消息处理 以及任务完成的处理

// 定义客户端接收进度更新的方法 由后台程序调用
processHub.client.updateProgress = function (message) {var $textarea = $('#txtLog');$textarea.val(function (i, currentValue) {return currentValue + message + '\n';});$textarea.scrollTop($textarea[0].scrollHeight);  // 滚动到最底部
};// 定义处理完成的回调函数 由后台程序调用
processHub.client.processingComplete = function () {// 启用开始处理按钮$('#btnProcess').prop('disabled', false).text('开始处理');// 隐藏停止处理按钮$("#btnStop").text('停止处理');$("#btnStop").hide();
};

3. 对后台程序进行改造

3.1 修改ProcessHub 类

  1. 支持多个客户端连接
  2. 每个客户端可以停止处理过程
  3. 如果客户端直接关闭浏览器,服务端也相应停止执行
public class ProcessHub : Hub
{// 此 Hub 将用于向客户端发送消息public static IHubContext HubContext{get { return GlobalHost.ConnectionManager.GetHubContext<ProcessHub>(); }}// 使用静态字典来存储每个连接的CancellationTokenSourcepublic static readonly ConcurrentDictionary<string, CancellationTokenSource> _connectionTokens = new ConcurrentDictionary<string, CancellationTokenSource>();// 获取或创建特定连接的CancellationTokenSourcepublic static CancellationTokenSource GetCancellationTokenSource(string connectionId){return _connectionTokens.GetOrAdd(connectionId, id => new CancellationTokenSource());}// 移除并取消特定连接的CancellationTokenSourcepublic static void RemoveCancellationTokenSource(string connectionId){if (_connectionTokens.TryRemove(connectionId, out var cts)){cts.Cancel();cts.Dispose();}}// 客户端直接关闭的情况的处理public override Task OnDisconnected(bool stopCalled){var connectionId = Context.ConnectionId;Debug.WriteLine($"{connectionId} Disconnected!");// 只取消当前断开连接的TokenSourceif (_connectionTokens.TryRemove(connectionId, out var cts)){cts.Cancel();cts.Dispose();}return base.OnDisconnected(stopCalled);}}

3.2 修改Default.aspx后台代码

由前端按钮AJAX触发

  1. 线程化处理
  2. 停止处理功能的实现 由前台按钮AJAX触发
// 由HTML的BUTTON AJAX触发
[WebMethod]
public static void StartProcessing(string connectionId)
{// 获取或创建该连接的CancellationTokenSourcevar cts = ProcessHub.GetCancellationTokenSource(connectionId);// 如果之前已请求取消,则重置if (cts.IsCancellationRequested){ProcessHub.RemoveCancellationTokenSource(connectionId);cts = ProcessHub.GetCancellationTokenSource(connectionId);}// 创建一个任务来异步处理数据Task.Run(() => ProcessData(connectionId, cts.Token));
}private static void ProcessData(string connectionId, CancellationToken cancellationToken)
{// 模拟初始延迟//Thread.Sleep(100);ProcessHub.HubContext.Clients.Client(connectionId).updateProgress($"开始处理...");  // updateProgress是前台脚本// 发送进度更新到客户端 处理在这里进行try{for (int i = 0; i < 100; i++){cancellationToken.ThrowIfCancellationRequested();ProcessHub.HubContext.Clients.Client(connectionId).updateProgress($"正在处理 {i} 的数据...");Thread.Sleep(100);  // 模拟处理需要0.	1秒}}catch (OperationCanceledException)  // 被用户中止{ProcessHub.HubContext.Clients.Client(connectionId).updateProgress("用户中止!");ProcessHub.HubContext.Clients.Client(connectionId).processingComplete();    // processingComplete是前台脚本return;}finally{// 处理完成后清理资源ProcessHub.RemoveCancellationTokenSource(connectionId);}// 正常完成ProcessHub.HubContext.Clients.Client(connectionId).updateProgress("数据处理完成!");ProcessHub.HubContext.Clients.Client(connectionId).processingComplete();
}// 由HTML的BUTTON AJAX触发
[WebMethod]
public static void CancelProcessing(string connectionId)
{ProcessHub.HubContext.Clients.Client(connectionId).updateProgress($"正在停止...");  // updateProgress是前台脚本// 只取消特定连接的TokenSourceif (ProcessHub._connectionTokens.TryGetValue(connectionId, out var cts)){cts.Cancel();}
}

相关文章:

使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(2)

接上文 使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用&#xff08;1&#xff09; https://blog.csdn.net/coldwind811201/article/details/147607641 1. 更新NuGet包 升级NuGet包后&#xff0c;注意相应修改前面页面上的JS引用为相应新版本的jquery JS脚本 …...

Java响应实体【R】

R响应实体 响应实体R(Response Entity)具体作用说明&#xff1f;1、用与数据传输2、用于状态反馈3、指令与控制 普通响应实体优化后的R&#xff1a;高级响应实体类 响应实体R(Response Entity)具体作用说明&#xff1f; 1、用与数据传输 传输请求结果 &#xff1a;当客户端向…...

短视频矩阵系统批量剪辑模式开发详解,支持OEM

在短视频行业竞争激烈的当下&#xff0c;短视频矩阵系统通过批量剪辑功能实现高效内容生产&#xff0c;成为众多运营者的利器。本文将深入探讨短视频矩阵系统中几种常见批量剪辑模式的开发思路与实现方法&#xff0c;助力开发者构建功能强大的批量剪辑模块。 一、批量剪辑模式概…...

顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%

导读&#xff1a;顺丰科技引入 Doris 替换 Presto&#xff0c;在内部可视化数据自助分析工具丰景台场景广泛应用。目前&#xff0c;顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中&#xff0c;日均查询量 100W。并实现 P95 性能提升近 3 倍&…...

使用 Cesium 构建 3D 地图应用的实践

CesiumJS 是一个功能强大的开源 JavaScript 库&#xff0c;能够帮助开发者快速构建高性能、高精度的 3D 地球和地图应用 。本文将介绍如何使用 Cesium 构建一个基本的 3D 地图应用&#xff0c;并加载自定义的 3D Tiles 模型。 初始化 Cesium Viewer 首先&#xff0c;在 Vue 的…...

公链钱包开发:技术逻辑与产品设计实践

公链钱包开发&#xff1a;技术逻辑与产品设计实践 ——2025年数字资产管理的范式革命与用户价值重构 一、公链钱包的核心理解&#xff1a;技术逻辑与用户价值的耦合 公链钱包不仅是存储数字资产的工具&#xff0c;更是用户与区块链生态交互的“超级入口”。其核心价值体现在三…...

mobile自动化测试-appium webdriverio

WebdriverIO是一款支持mobile app和mobile web自动化测试框架&#xff0c;与appium集成&#xff0c;完成对mobile应用测试。支持ios 和android两种平台&#xff0c;且功能丰富&#xff0c;是mobile app自动化测试首选框架。且官方还提供了mobile 应用测试example代码&#xff0…...

【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现

&#x1f3b5; 【Python开源】深度解析&#xff1a;一款高效音频封面批量删除工具的设计与实现 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&#xff0c;热情…...

飞算 用到妙处 AI辅助编程 - 双击方法名,自动识别到上下文中很方便

1. 双击findtasktypedict方法。右侧箭头指向自动识别 2. 按照说的内容机型了修改...

msIT大模型推理迁移调优工具

msIT LLM大模型ATB推理精度工具 适用场景&#xff1a;大模型加速库推理精度分析工具能力&#xff1a;大模型推理精度工具msIT llm&#xff0c;提供基于加速库推理的精度调试工具&#xff0c;支持数据dump、精度比对、单算子预检、溢出检测、模型迁移等能力。 msIT LLM大模型…...

YOGA Air X ILL10(83CX)/YOGA 14 ILL10X(83LC)2025款恢复开箱状态原装出厂Win11系统OEM镜像

适用机型(MTM)&#xff1a; 【83LC】链接&#xff1a;https://pan.baidu.com/s/1AwbFR9nccvyzS1pOCToMvA?pwdewjs 提取码&#xff1a;ewjs 【83CX】链接&#xff1a;https://pan.baidu.com/s/1wMRI8ETodVG59GBDVDLgQg?pwdn3nx 提取码&#xff1a;n3nx lenovo联想原装wi…...

使用Deployment部署运行Nginx和Apache服务

1.Deployment简介 &#xff1a; 在Kubernetes&#xff08;k8s&#xff09;中&#xff0c;Deployment 是一种核心控制器资源&#xff0c;用于管理无状态应用的声明式部署、扩展与更新。它通过定义应用的期望状态&#xff0c;由控制器自动维护实际状态与期望状态的一致性&#x…...

382_C++_在用户会话结束时,检查是否有其他会话仍然来自同一个客户端 IP 地址,没有连接状态设置为断开,否则为连接

之前出现的问题:重启管理机,工作机上面热备连接状态显示未连接 (此时是有一个工作机连接管理机的),所以正常应该是连接状态解决:根因分析: 重启管理机后,管理机给过来的cookie是空的,导致工作机同时存在两个管理机的session,在其中一个超时后,调用回调函数通知会话断开…...

【 Redis | 实战篇 短信登录 】

前言&#xff1a; 主要完成了基于Session实现登录&#xff0c;解决集群的Session共享问题&#xff0c;从而实现了基于Redis来实现共享Session登录 1.基于Session实现登录 1.1.发送短信验证码 步骤&#xff1a; 前端提交手机号 》校验手机号 》不符合返回错误信息&#xff0…...

AI(学习笔记第二课) 使用langchain进行AI开发

文章目录 AI(学习笔记第二课) 使用langchain进行AI开发学习内容&#xff1a;1. 使用背景2.创建python&#xff08;pycharm community版&#xff09;开发环境并连接deepseek2.1 创建python&#xff08;pycharm community版&#xff09;开发环境2.2 创建python工程2.3 写入初始py…...

如何查看某个文件中的特殊符号

Q&#xff1a;如何查看某个文件中的特殊符号&#xff0c;比如说是换行符之类的转义字符&#xff1f; 1&#xff0c;法1&#xff1a;使用cat -A cat -A filename可以看到-A本质上就是-vET&#xff0c;也就是 展示所有的字符&#xff0c;-v是显示非打印字符&#xff0c;这个需…...

venv环境里控制scapy版本和起trex v2.87

要在虚拟环境&#xff08;venv&#xff09;中控制Scapy版本并运行TRex v2.87&#xff0c;您可以按照以下步骤操作&#xff1a; 创建一个新的虚拟环境&#xff1a; python3 -m venv trex-env激活创建的虚拟环境。在Linux或macOS上&#xff1a; source trex-env/bin/activate在Wi…...

第五十四篇 AI与数据分析

一、AI数据分析就像做菜 想象你在厨房做一道新菜&#xff0c;AI数据分析的流程其实非常相似&#xff1a; 买菜&#xff08;获取数据&#xff09; 去市场挑选新鲜蔬菜 从Excel/数据库获取数据例&#xff1a;pd.read_csv(超市销售表.csv) 洗菜切菜&#xff08;清洗数据&#x…...

C++面向对象编程入门:从类与对象说起(一)

C语言是面向过程&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题&#xff0c;而C面向的是对象&#xff0c;关注的是对象&#xff0c;将一件事拆解成多个对象&#xff0c;靠对象之间互交完成。 目录 类的定义 类的两种定义 …...

openwrt之UCI 增删改查(add/get/set /add_list...)

1&#xff0c;引入 UCI是openwrt的统一配置接口&#xff0c;所有的配置文件被存放在/etc/config/下&#xff0c;使用UCI工具操作具体可查询官网中的开发文章&#xff1a; [OpenWrt Wiki] The UCI systemhttps://openwrt.org/docs/guide-user/base-system/uciconifg <secti…...

TypeScript 中,属性修饰符

在 TypeScript 中&#xff0c;属性修饰符&#xff08;Property Modifiers&#xff09;是用于修饰类的属性或方法的关键字&#xff0c;它们可以改变属性或方法的行为和访问权限。TypeScript 提供了三种主要的属性修饰符&#xff1a;public、private 和 protected。此外&#xff…...

LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述

【LetMeFly】3341.到达最后一个房间的最少时间 I&#xff1a;Dijkstra算法&#xff08;类似深搜&#xff09;-简短清晰的话描述 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一个地窖&#xff0c;地窖中有 n x m 个房间…...

http重新为https

1.先创建一个配置文件 主要方便实验 可以将主配置文件下的location全部注释掉&#xff0c;方便观察 2.配置新配置文件 server{ listen 80; listen 443 ssl; ssl_certificate /usr/local/nginx/conf.d/ssl/www.kgc.com.crt; ssl_certificate_key /usr/local/nginx/conf…...

2025最新免费视频号下载工具!支持Win/Mac,一键解析原画质+封面

软件介绍 适用于Windows 2025 最新5月蝴蝶视频号下载工具&#xff0c;免费使用&#xff0c;无广告且免费&#xff0c;支持对原视频和封面进行解析下载&#xff0c;亲测可用&#xff0c;现在很多工具都失效了&#xff0c;难得的几款下载视频号工具&#xff0c;大家且用且珍…...

CTF杂项入门(BUUCTF-Misc第一页)

写在前面 题目涵盖&#xff1a;BUUCTF 第一页杂项 涉及工具&#xff1a; 随波逐流、foremost、binwalk、honeyview、010editor、zipperello、archpr、wireshark、cyberchef、QR_Research、PNGCRC爆破、stegsolve、Audacity、河马、D盾、routerpassview、steghide&#xff0c;以…...

碰一碰发视频一键成片功能开发实践与技术解析

在数字化营销与内容传播领域&#xff0c;碰一碰发视频技术凭借便捷的交互体验&#xff0c;已成为实体商业引流的重要手段。而一键成片功能的融入&#xff0c;能够让用户在触碰 NFC 标签后&#xff0c;快速获取高质量的视频内容&#xff0c;进一步提升传播效率。本文将从功能需求…...

【CTFer成长之路】举足轻重的信息搜集

举足轻重的信息搜集 信息搜集 常见的搜集 题目描述: 一共3部分flag docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-information-backk:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{info_…...

centos搭建dokcer和vulhub

1、换源阿里云 2、安装docker与docker-compose 下载1.29.2 docker compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 如果下载不了&#xff0c;可以…...

Linux系统下使用Kafka和Zookeeper

Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目。它具有高吞吐量、可扩展性、持久性、容错性等特点,主要用于处理实时数据流。 Linux系统下使用Kafka 1.安装 Java Kafka 和 Zookeeper 都是基于 Java 开发的,所以需要先…...

vscode与keil的乱码不兼容问题

都用英文注释 中文注释的话&#xff0c;打开vscode的自动识别格式,如下 解决VSCode中文乱码 自动识别也可以设置识别优先级&#xff0c;把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312) 4.!!!在暂存更改的时候&#xff0c;不要把vscode的设置给暂存了&#xff…...

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍&#xff1a;C类和对象&#xff1a;构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数&#xff1a; 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。⼀个类…...

【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit

1.问题描述&#xff1a; 预览PDF文件&#xff0c;文档上所描述的loadDocument接口&#xff0c;可以返回文件的状态&#xff0c;并无法实现PDF的预览&#xff0c;是否有能预览PDF相关接口&#xff1f; 解决方案&#xff1a; 1、执行loadDocument进行加载PDF文件后&#xff0c…...

Spring Boot 3 + Undertow 服务器优化配置

优化背景 当你的application需要支持瞬时高并发的时候&#xff0c;tomcat已经不在是最优的选择&#xff0c;我们可以改为Undertow&#xff0c;并对其进行优化。 Undertow 是一个轻量级的、高性能的Java Web 服务器&#xff0c;由JBoss 开发并开源。它是基于非阻塞&#xff08;…...

网易游戏 Flink 云原生实践

摘要&#xff1a;本文整理自网易游戏实时计算&数据湖平台负责人林小铂老师和网易游戏大数据开发工程师陈宇智老师&#xff0c;在Flink Forward Asia 2024 云原生专场的分享。主要分为四个部分&#xff1a; 1、背景 2、架构演进 3、实践挑战 4、总结和展望 01.背景 Flink 在…...

使用迁移学习的自动驾驶汽车信息物理系统安全策略

信息物理系统 (CPS) 是一种新兴系统,它通过信息通信基础设施,实现控制系统、传感器、执行器和周围环境等物理组件之间有效的实时通信与协作 (C&C)。自动驾驶汽车 (AV) 是大量采用 CPS 方法的领域之一,旨在通过降低能源消耗和空气污染来改善智慧城市中的人们生活。因此,…...

《算法导论(第4版)》阅读笔记:p11-p13

《算法导论(第4版)》学习第 8 天&#xff0c;p11-p13 总结&#xff0c;总计 3 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;2) 1.precious (1)precious: pretium(“value, worth, price”) adj. of great value(宝贵&#xff0c;珍贵)。 (2)示例 Computing t…...

Qt 编译 sqldrivers之psql

编译postgres pgsql驱动 下载驱动源码修改配置文件编译 下载驱动源码 // 源代码下载 https://download.qt.io/archive/qt/5.15/5.15.2/submodules/驱动目录:qtbase-everywhere-src-5.15.2\src\plugins\sqldrivers 修改配置文件 打开pro文件 右键点击添加库 此处的为debu…...

查看单元测试覆盖率

文章目录 1、POM文件配置2、编写单元测试3、执行单元测试4、查看单元测试覆盖率 1、POM文件配置 pom文件配置jacoco插件 <!-- 生成JaCoCo覆盖率数据插件 --> <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artif…...

ASP.NET Core 中实现 Markdown 渲染中间件

文章目录 前言一、核心功能二、实现步骤1&#xff09;安装依赖包2&#xff09;创建中间件类3&#xff09;中间件扩展方法4&#xff09;在Program.cs配置5&#xff09;模板文件示例6&#xff09;*.md文件示例7&#xff09;缓存优化8&#xff09;使用示例 三、注意事项总结 前言 …...

AI学习路径

一、AI入门与系统课程 &#xff08;1&#xff09;《开启AI革命&#xff1a;7天从小白到大神》 简介&#xff1a;保姆级教学&#xff0c;覆盖AI基础知识、机器学习、深度学习、自然语言处理&#xff08;NLP&#xff09;、大语言模型&#xff08;LLM&#xff09;等&#xff0c;…...

基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(下)

文章目录 k8s安装部署Pulsar集群前期准备版本要求 安装 Pulsar Helm chart管理pulsarClustersBrokersTopic k8s安装部署Pulsar集群 前期准备 版本要求 Kubernetes 集群&#xff0c;版本 1.14 或更高版本Helm v3&#xff08;3.0.2 或更高版本&#xff09;数据持久化&#xff…...

B站搜索关键词全攻略:掌握B站搜索关键词的运作机制

在拥有超过7亿月活用户的B站&#xff0c;每天都有海量视频涌入平台。无论是普通用户还是内容创作者&#xff0c;掌握B站搜索关键词的运作机制&#xff0c;都能极大提升平台体验和内容价值。本文将从用户和创作者双重视角&#xff0c;深入解析B站搜索关键词的应用技巧和优化策略…...

Windows系统安装Cursor与远程调用本地模型QWQ32B实现AI辅助开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

DBeaver查询PostgreSQL的只读模式

问题 DBeaver查询PostgreSQL数据表时&#xff0c;注意到经常会出现“Detect unique identifiers" 这个阶段&#xff0c;几乎需要花费10s时间&#xff0c;想着挺浪费时间的。 问题解决办法 把”读取数据表元数据(唯一键)"这个复选框选项去掉&#xff0c;再进行查询…...

C++内存管理与模板初阶详解:从原理到实践

目录&#xff1a; 一、C/C内存管理1. 内存区域划分2. 动态内存管理3. 底层原理&#xff1a;operator new/delete4.new和delete的实现原理5. 定位new&#xff08;了解即可&#xff09; 二、模板初阶1. 泛型编程2. 函数模板实例化隐式实例化&#xff1a;编译器自动推导类型显式实…...

02-GBase 8s 事务型数据库 客户端工具dbaccess

dbaccess概述 数据库产品通常会提供一个命令行客户端工具。 数据库厂商 命令行客户端 Oracle sqlplus MySQL mysql Marladb mysql GBase 8s dbaccess Kingbase ES ksql DM8 disql dbaccess 是 GBase 8s 数…...

【kubernetes】通过Sealos 命令行工具一键部署k8s集群

一、前言 1、sealos安装k8s集群官网&#xff1a;K8s > Quick-start > Deploy-kubernetes | Sealos Docs 2、本文安装的k8s版本为v1.28.9 3、以下是一些基本的安装要求&#xff1a; 每个集群节点应该有不同的主机名。主机名不要带下划线。所有节点的时间需要同步。需要…...

【Pandas】pandas DataFrame abs

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值 pandas.DataFrame.abs() pandas.DataFrame.abs() 方法用于返回 DataFrame 中每个元素的绝对值。该方法适用于包含数值型数据的 DataFrame&#xff0c;对…...

如何在 C# 和 .NET 中打印 DataGrid

DataGrid 是 .NET 架构中一个功能极其丰富的组件&#xff0c;或许也是最复杂的组件之一。写这篇文章是为了回答“我到底该如何打印 DataGrid 及其内容”这个问题。最初即兴的建议是使用我的屏幕截图文章来截取表单&#xff0c;但这当然无法解决打印 DataGrid 中虚拟显示的无数行…...

使用DEEPSEEK快速修改QT创建的GUI

QT的GUI&#xff0c;本质上是使用XML进行描述的&#xff0c;在QT CREATOR的界面编辑处&#xff0c;按CTRL2 切换到代码视图&#xff0c;CTRL3切换到编辑器视图。 CTRL2 切换到代码视图 CTRL3 切换到编辑器视图 鼠标左键点击代码视图中&#xff0c;按CTRLA → CTRLC复制XML代码…...