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

Windows 事件与跨线程调用

需求

当我们新建一个类,通常会遇到当类的一个属性变化时,如何通知用户?比如串口收到数据,tcp 或UDP 收到网络数据时,如何及时通知用户?
1、查询是否收到,若收到,在文本框显示。
2、专门新增加一个线程,专门负责接收数据。当有数据收到时,通过“数据已收到”事件,用事件处理程序,来更新文本框。
第一种方法简单,但十分占用资源。第二种方法,涉及事件及线程安全问题。

现以第二种方法为例,进行说明。

(1) 在类中声明事件处理程序

publicdelegatevoidReiceivedDataChgEventHandler(object sender,ReceivedDataChgEventArgsargs);publicReiceivedDataChgEventHandler?ReceivedDataChg;

(2)在数据的set 方法中,加入事件处理

publicstringReceivedData{set{string oldValue=receivedData??"";string newValue=value??"";receivedData=value;NewData=true;OnReceivedDataChg("receivedData",oldValue,newValue);}}privatestring?receivedData;publicvirtualvoidOnReceivedDataChg(string name,object oldValue,object newValue){if(ReceivedDataChg!=null){ReceivedDataChg.Invoke(this,newReceivedDataChgEventArgs(name,oldValue,newValue));}}

3、在form中,新建类,并为ReceivedDataChg增加处理程序。特别要说明的时,由于类form并不时由serialPort类创建的,由类的实例调用form中的控件时,windows 认为类越权了。所以需要由textBox2反过来调用类的事件处理程序 “setText"。

是不是有点绕。

privatevoidbutton1_Click(object sender,EventArgse){string portName=comboBox1.SelectedItemas string??"com1";sp=new(portName,115200,8,"1",SerialPortC.ParityBits.None);sp.ReceivedDataChg+=SetText;if(sp._serialPort.IsOpen){this.textBox1.Text="AT";sp.Writeline("AT");}}publicvoidSetText(object sender,ReceivedDataChgEventArgsargs){if(this.textBox2.InvokeRequired){this.textBox2.Invoke(SetText,this.textBox2,args);}else{this.textBox2.AppendText((string)args.NewValue);}}
http://www.gsyq.cn/news/1431020.html

相关文章:

  • 从零开始学fMRI:用Python+SPM12处理你的第一个静息态数据(保姆级避坑指南)
  • 【深度解析】Hermes Agent Velocity Release:长期记忆、自进化技能与多智能体任务编排实践
  • 基于 YOLOv8 的快递纸箱缺陷检测系统(完整项目|可直接运行)快递纸箱缺陷检测数据集训练及应用
  • 【深度解析】Claude Opus 编码模型的工程化使用:长上下文、Agent 工作流与代码审查实战
  • 水上乐园涂料铺什么好?耐磨、附着力和长期浸水稳定性是关键
  • 破解网盘限速:智能下载助手让文件传输重回自由时代
  • 68.专治系统崩溃黑砖!EDL紧急救砖+DFU固件恢复完整可复现方案
  • 音乐格式解密终极指南:5分钟快速解锁加密音频文件的完整免费方案
  • PlantUML——定时图
  • 2026 南京苏易防水修缮|卫生间、阳台、屋顶、地下室免砸砖漏水专项维修 - 吉修匠
  • Markdown Preview Mermaid Support:在VS Code中轻松创建专业图表 [特殊字符]
  • Airtable 零基础快速上手与实战指南
  • openai sdk接入claude怎么做?结合简易api中转站完成原有OpenAI项目扩展Claude的实用方案
  • 037、小目标检测专项改进:增加小目标检测层、高分辨率特征图与超参数联动调优
  • RT-Thread Studio里那个神秘的‘CubeMX Setting’按钮,到底该怎么用?
  • 纳米 AI 搜索新手极速上手指南
  • Arm编译器更新订阅与功能安全认证维护指南
  • 2026年西安靠谱的育婴师推荐排名 - mypinpai
  • MapLibre GL JS第30课:添加视频
  • [开源] 医保基金流向追踪图:面向医保办自查与汇报的可视化分析系统
  • 大模型核心基础知识(12)—机器学习的基本概念与常见方法
  • 2026年养老保姆推荐平台排名,价格透明吗? - mypinpai
  • MobileNet-Yolo深度解析:超轻量级实时目标检测的终极实战指南
  • 终极指南:如何免费获取和使用Poppins多语言字体
  • 038、替换激活函数能涨几个点?SiLU、Mish、GELU、ReLU 在 YOLO 上的消融实验
  • OBS-Multi-RTMP:一键同步多平台直播,让内容传播效率提升300%
  • 2026年适配维普AI智能降重工具横评:亲测8款工具,把AIGC率稳控在安全线内
  • 告别手动对账:3步实现美团饿了么百度外卖订单自动化采集 [特殊字符]
  • 2026年徐州讯灵AI品牌推荐 - mypinpai
  • 终极QMCFLAC转MP3解决方案:突破QQ音乐加密格式限制