news 2026/8/12 19:44:27

C#事件声明办法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#事件声明办法
publiceventAction<string>?OnLogMessage;publiceventAction<bool>?OnAutoRunCompleted;_modbusClient.OnLogMessage+=LogMessage;_modbusClient.OnDeviceStatusChanged+=OnModbusDeviceStatusChanged;//------直接调用//_plcModbusClient.OnLogMessage += (msg) => LogMessage($"[PLC串口] {msg}");//_plcModbusClient.OnDeviceStatusChanged += (addr, online) =>//{// LogMessage($"PLC设备 {addr} 状态: {(online ? "在线" : "离线")}");// };privatevoidLogMessage(stringmessage){if(txtLog.InvokeRequired){txtLog.Invoke(newAction<string>(LogMessage),message);return;}txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}]{message}\r\n");txtLog.ScrollToCaret();}privatevoidOnModbusDeviceStatusChanged(byteaddress,boolisOnline){if(InvokeRequired){Invoke(newAction(()=>OnModbusDeviceStatusChanged(address,isOnline)));return;}LogMessage($"Modbus设备{address}状态:{(isOnline?"在线":"离线")}");}

其他窗体也可以调取这个事件来触发当前窗体内的数据变化(事件可以加在本地):

例如 :SerialPortSettings:form 下 创建一个public 的事件
// 回调事件,用于通知主窗体状态变化

publiceventAction<string,Color>?OnStatusUpdated;

本窗体内事件的操作:

OnStatusUpdated?.Invoke("正在检测设备...",Color.Yellow);

引用的窗体需要这样调取:

SerialPortSettingssettingsForm=newSerialPortSettings(_modbusClient);//实例化formsettingsForm.OnStatusUpdated+=(status,color)=>UpdateStatusComm(status,color);//挂载事件///settingsForm.OnStatusUpdated += UpdateStatusComm(status, color);//这样应该可以///创建事件方法publicvoidUpdateStatusComm(stringtext,Color?color=null){if(InvokeRequired){Invoke(newAction(()=>UpdateStatusComm(text,color)));return;}lblStatusComm.Text=$"通信状态:{text}";if(color.HasValue)lblStatusComm.ForeColor=color.Value;}

这样就能不同窗体之间的事件调取

-------------------------------------------------------------多参数操作:

1.在需要操作的类下面创建事件

publiceventAction<DeviceInfo,bool>?OnDeviceStatusChanged;

写入方法,以便可以轻松的写入需要调用的界面的事件方法中:

_modbusClient.OnDeviceStatusChanged+=(addr,success)=>{vardevice=_devices.FirstOrDefault(d=>d.SlaveAddress==addr);if(device!=null){device.Status=success?DeviceStatus.Online:DeviceStatus.Offline;device.LastCommunication=DateTime.Now;device.FailCount=success?0:device.FailCount+1;OnDeviceStatusChanged?.Invoke(device,success);}};

2.其他界面调用时需要的操作:

实例化后再初始化时先挂载事件下的方法:

_deviceManager.OnDeviceStatusChanged+=OnDeviceManagerStatusChanged;

事件方法操作本身,这样操作类的事件触发就到了这这个页面了:

privatevoidOnDeviceManagerStatusChanged(DeviceInfodevice,boolisOnline){if(InvokeRequired)//先判断是否异步{Invoke(newAction(()=>OnDeviceManagerStatusChanged(device,isOnline)));return;}if(device.DeviceId>=1&&device.DeviceId<=6){_deviceOnlineStatus[device.DeviceId]=isOnline;}LogMessage($"设备{device.Name}(地址:{device.SlaveAddress}) 状态:{(isOnline?"在线 ✓":"离线 ✗")}");UpdateTabColors();if(device.DeviceId==_currentDeviceId){UpdateCurrentDeviceStatus(isOnline);}intonlineCount=_deviceOnlineStatus.Count(s=>s==true);if(onlineCount>0){UpdateStatusComm($"已连接 ({onlineCount}/6)",Color.Green);}else{UpdateStatusComm("未连接",Color.Red);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 19:44:15

2026精准抢占北京同城流量!品视传媒销冠张凯,量身打造钢结构楼梯行业 GEO 全域获客方案

随着生成式人工智能普及&#xff0c;建筑工程行业线上获客逻辑迎来重大变革。传统竞价推广成本持续走高、常规 SEO 流量增长乏力&#xff0c;大量北京钢结构楼梯厂商、工程施工团队陷入 “有产能、缺客源” 困境。依托企优托集团技术底座的江苏品视传媒&#xff0c;深耕实体工程…

作者头像 李华
网站建设 2026/8/12 19:43:07

芯片测试:从DFT设计到量产良率管理的系统工程实践

1. 项目概述&#xff1a;从“测不准”到“测得准”的认知跃迁 “芯片测试问题”这六个字&#xff0c;对于任何一个身处半导体行业&#xff0c;尤其是设计、制造、封测环节的工程师来说&#xff0c;都足以引发一场头脑风暴。它不像“如何设计一个CPU”那样宏大叙事&#xff0c;也…

作者头像 李华
网站建设 2026/8/12 19:41:42

阿里云免费SSL证书申请与部署全攻略:从原理到实战

1. 项目概述&#xff1a;为什么我们需要一张免费的SSL证书&#xff1f;如果你正在运营一个网站&#xff0c;无论是个人博客、小型企业官网还是一个内部管理系统&#xff0c;在浏览器地址栏里看到那个“不安全”的红色警告&#xff0c;心里总会有点发毛。用户看到这个提示&#…

作者头像 李华
网站建设 2026/8/12 19:41:37

基于AT32F403A与AD9220实现双通道ADC高精度同步采样方案

1. 项目缘起&#xff1a;当双通道同步采样成为刚需 在嵌入式信号采集领域&#xff0c;我们常常会遇到一个看似简单、实则棘手的需求&#xff1a;如何让两个独立的ADC&#xff08;模数转换器&#xff09;实现真正意义上的同步采样&#xff1f;这里的“同步”&#xff0c;指的是两…

作者头像 李华
网站建设 2026/8/12 19:37:38

科源制药子公司亮相2026西普会 共探AI时代产业增长新路径

8月12日&#xff0c;第十九届健康产业生态大会&#xff08;2026西普会&#xff09;在海南博鳌正式启幕。作为医药零售领域极具影响力的行业盛会&#xff0c;本届大会以“走进AI时代——健康产业的范式革命与路径选择”为年度主题&#xff0c;聚焦AI技术在科研、制造、医疗、营销…

作者头像 李华
网站建设 2026/8/12 19:37:18

深入解析Ubuntu软件包管理:apt、apt-get与dpkg的核心原理与实战指南

1. 项目概述&#xff1a;从“装软件”到理解系统基石在Linux世界里&#xff0c;尤其是Ubuntu及其衍生发行版中&#xff0c;安装、卸载、更新软件是每个用户从入门到精通都无法绕开的日常操作。新手们常常会接触到几个听起来相似却又让人困惑的命令&#xff1a;apt、apt-get、dp…

作者头像 李华