C# 按照主题的订阅 按照类型的订阅

安装TinyPubSub库,按照 主题发布订阅
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static TinyPubSubLib.TinyPubSub;namespace Net9Test
{public partial class Form4 : Form{private readonly string _channelName = "MyChannel";public Form4(){InitializeComponent();RefresUI();RefresUI2();}private void button1_Click(object sender, EventArgs e){Publish(_channelName, Guid.NewGuid().ToString());}public void RefresUI(){Subscribe<string>("MyChannel", data =>{richTextBox1.Invoke(new Action(() =>{richTextBox1.AppendText($"[{DateTime.Now}] 收到消息:{data}\r\n");}));});}public void RefresUI2(){Subscribe<string>(_channelName, data =>{richTextBox2.Invoke(new Action(() =>{richTextBox2.AppendText($"[{DateTime.Now}] 收到消息:{data}\r\n");}));});}private void Form4_FormClosing(object sender, FormClosingEventArgs e){Unsubscribe(_channelName);}}
}

安装PubSub库,按照类型发布 订阅,相当于轻量的MediatR,中介者模式
在这里插入图片描述

using Net9Test.Services;
using PubSub;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Net9Test
{public partial class Form3 : Form{Hub hub = Hub.Default;public Form3(){InitializeComponent();RefreshUI();RefreshUI2();}Random random = new Random(DateTime.Now.Microsecond);private void button1_Click_1(object sender, EventArgs e){hub.Publish(random.Next(100, 200));}public void RefreshUI(){hub.Subscribe<int>(this, data =>{richTextBox1.Invoke(new Action(() =>{richTextBox1.AppendText($"[{DateTime.Now}] 收到消息:{data}\r\n");}));});}public void RefreshUI2(){hub.Subscribe<int>(this, data =>{richTextBox2.Invoke(new Action(() =>{richTextBox2.AppendText($"[{DateTime.Now}] 收到消息:{data}\r\n");}));});}private void Form3_FormClosing(object sender, FormClosingEventArgs e){hub.Unsubscribe<int>();}}
}

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

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

相关文章

当执行shell时,出现未预期的符号 `$‘\r‘‘ 附近有语法错误

1.当执行shell时&#xff0c;出现未预期的符号 $‘\r’’ 附近有语法错误 解决&#xff1a; linux下解决&#xff1a; 方案一&#xff1a; Linux下打开shell文件&#xff0c;用vi/vim命令打开脚本文件&#xff0c;输入“:set fileformatunix”&#xff0c;回车&#xff0c;保存…

合作共赢|华望系统科技受邀出席杭州市基础软件和工业软件产业技术联盟成立大会

大会现场&#xff08;图源官方&#xff09;2025年7月11日&#xff0c;在杭州市经济和信息化局&#xff08;杭州市数字经济局&#xff09;的指导下&#xff0c;杭州市基础软件与工业软件产业技术联盟成立大会暨工业软件生态共性云平台发布仪式在西电杭州研究院圆满举行。会上&am…

7.17 滑动窗口

lc523.同余定理两个注意点同余定理&#xff1a;余数相同的两个数&#xff0c;做差可被整除。--前缀和hash存mod&#xff0c;不可以用set&#xff0c;因为要保证len大于等于2&#xff0c;所以要存idx映射&#xff01;&#xff01;还有对于全选和全不选的两个边界&#xff0c;下标…

算法与前端的可访问性

引言 可访问性&#xff08;Accessibility, a11y&#xff09;是现代 Web 开发的核心&#xff0c;确保所有用户&#xff0c;包括残障人士&#xff0c;都能无障碍地使用应用。算法在优化前端性能的同时&#xff0c;也能通过高效的数据处理和交互逻辑提升可访问性体验。例如&#x…

使用token调用Spring OAuth2 Resource Server接口错误 insufficient_scope

1、场景 最近照着《Spring Security实战》学习&#xff0c;学到第18章&#xff0c;使用Keycloak作为授权服务器&#xff0c;使用 org.springframework.boot:spring-boot-starter-oauth2-resource-server 实现资源服务器&#xff0c;调用资源服务器的接口返回403&#xff0c;具…

4. 观察者模式

目录一、现实应用场景二、初步实现2.1 实现方案12.2 实现方案2三、观察者模式3.1 应用场景3.2 详解3.3 实现3.4 设计类图四、实现五、更多一、现实应用场景 教师的手机号改变之后要通知给所有学生如果有一个学生没有通知到位就会产生遗漏如何自动完成 二、初步实现 2.1 实现…

es 启动中的一些记录

完整修复流程 bash # 1. 创建用户主目录(如果需要) mkdir -p /home/es8 chown es8:es8 /home/es8# 2. 变更 Elasticsearch 目录所有权 chown -R es8:es8 /data/es/elasticsearch-8.17.2/# 3. 调整目录和文件权限 chmod -R 755 /data/es/elasticsearch-8.17.2/ chmod 644 /d…

区块链之拜占庭容错算法——Practical Byzantine Fault Tolerance(PBFT)

实用拜占庭容错算法&#xff08;PBFT&#xff09;是由 Barbara Liskov 和 Miguel Castro 于 90 年代末提出的一种共识算法。原论文链接如下&#xff1a; http://pmg.csail.mit.edu/papers/osdi99.pdf pBFT 被设计为在异步&#xff08;响应请求的时间没有上限&#xff09;系统…

从电子管到CPU

在线verilog转电路图 简单门电路 https://logic.ly/demo/ 数学基础 普通逻辑 与自然语言关系紧密, 亚里士多德三段论,‌‌穆勒五法 , 语言, 语义,概念,定义,辩论, 诈骗 等, 是文科类的逻辑。 离散数学 不连续数学 数理逻辑 命题逻辑与谓词逻辑, 与数学推理关系紧密, 它…

Javase-8.数组的练习

1.查找数组中指定元素(二分查找)以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较&#xff1a; 如果相等&#xff0c;即找到了返回该元素在数组中的下标 如果小于&#xff0c;以类似方式到数组左半侧查找 如果大于&#xff0c;以…

H3CNE综合实验之机器人

H3CNE综合实验之机器人 实验拓扑图实验需求 1.按照图示配置 IP 地址 2.SW1 和 SW2 之间的直连链路配置链路聚合 3.公司内部业务网段为 Vlan10 和 Vlan20;Vlan10 是市场部&#xff0c;Vlan20 是技术部&#xff0c;要求对 Vlan 进行命名以识别; ​ PC8 属于 Vlan10&#xff0c…

2025/7/15——java学习总结

Java IO、Stream、异常与 File 全体系总结&#xff1a;从基础到进阶的完整突破一、核心知识深耕&#xff1a;四大模块的体系与底层逻辑&#xff08;一&#xff09;IO 流&#xff1a;数据传输的基础通道体系架构与核心分类按流向&#xff1a;输入流&#xff08;InputStream/Read…

【轨物方案】当补贴退潮,光伏电站如何回归价值本质?

中国光伏产业正站在一个历史性的拐点。过去&#xff0c;国家补贴的“黄金时代”催生了装机量的爆发式增长&#xff0c;许多电站在建设初期将重心放在了快速并网&#xff0c;却忽视了贯穿2-30年生命周期的运维规划。如今&#xff0c;补贴浪潮逐渐退去&#xff0c;各大企业开始从…

群晖Nas - Docker(ContainerManager)上安装SVN Server和库权限设置问题

上次安装了Gitlab&#xff0c;可以参考这篇&#xff08;群晖Nas - Docker&#xff08;ContainerManager&#xff09;上安装GitLab&#xff09;&#xff0c;今天来搞SVN服务器&#xff0c;废话不多说。 下载镜像 还是先下载镜像&#xff08;garethflowers/svn-server&#xff…

前端打包自动压缩为zip--archiver

安装依赖 pnpm add archiver types/archiver/vitePlugins/autoBuildZip.ts import { Plugin } from vite; import archiver from archiver; import fs from fs;const compressFolder (folderPath: string, outputFilePath: string) > {const output fs.createWriteStream(…

React响应式组件范式:从类组件到Hooks

​引言 在UI开发中&#xff0c;"状态变化自动触发UI更新"的响应式机制是构建动态界面的核心。React通过独特的​​单向数据流​​和​​虚拟DOM&#xff08;Virtual DOM&#xff09;​​ 实现这一目标&#xff0c;但类组件&#xff08;Class Components&#xff09;…

com2tcp工具

com2tcp 是 com0com 套件中的一个实用工具&#xff0c;用于将本地串口&#xff08;COM&#xff09;数据转发到 TCP/IP 网络&#xff0c;或者将 TCP/IP 数据转发到本地串口&#xff0c;实现串口数据的网络透传。 1. com2tcp 基本用法 &#xff08;1&#xff09;安装 com0com 从…

MySQL实操:将Word表格数据导入MySQL表

文章目录 1. 提出任务1.1 Word表格数据1.2 查看商品空表1.3 任务要求2. 完成任务2.1 借助AI2.1.1 利用AI生成SQL语句2.1.2 在Navicat里执行查询2.1.3 查看商品表记录2.2 借助Excel2.2.1 将Word表格数据复制到Excel2.2.2 新建商品表2.2.3 利用导入向导将电子表格数据导入商品表2…

什么是Podman?能否替代Docker?Podman快速入门

什么是PodmanPodman&#xff08;POD Manager&#xff09;是一个开源的无守护进程&#xff08;daemonless&#xff09;容器引擎&#xff0c;用于管理容器、容器镜像、容器卷和网络。它兼容 OCI 标准&#xff0c;可以运行 Docker 镜像&#xff0c;并且设计上与 Docker CLI 命令高…

开通保存图片权限

直接粘贴就可以用 上干货 可以的话希望点个start/* 小程序特有相关 */mp-weixin: {appid: VITE_WX_APPID,setting: {urlCheck: false,minified : true //是否压缩js},usingComponents: true,"lazyCodeLoading": "requiredComponents", //按需注入"pe…