winform跨线程访问控件
A. C# 简易TCP网口调试助手(一) 客户端Client
最近在开发上位机过程中,经常需要用到网口和串口通讯,网上的资料和开源代码并不多。下面我将介绍一个实用的TCP通讯工具包,并详细记录使用步骤。
这个博客旨在记录我学到的知识,方便以后查阅。同时,我也会注明来源,感兴趣的读者可以前往详细了解。
实现效果如下:右侧的测试程序可以收发数据,检测连接状态。即使在5000多行数据量的情况下,也不会出现数据错误,速度也很快,完全满足个人工作需求。重点是使用“STTech.ByteslO.Tcp”这个nuget包。
在开发过程中,我使用了以下环境:
开发工具:Visual Studio 2022
用户界面框架:winform
框架版本:.NET Framework 4.8
接下来是项目搭建步骤:
1. 新建winform项目
选择“Windows窗体应用(NET Framework)”项目,输入项目名称为TCP_Client,使用框架为.NET Framework 4.8。
2. 添加nuget包
右键项目,添加TCP的nuget包,使用STTech.ByteslO.Tcp,版本为2.14.6-alpha0225。在nuget管理界面的浏览页面下搜索bytesio,找到nuget包,点击安装并确定。
3. 创建界面
放入容器控件groupbox、工具条控件ToolStrip和显示属性的PropertyGrid控件。groupbox的text改为“连接信息”,ToolStrip增加两个text类型的文本按钮:连接、断开。PropertyGrid的dock设为Fill,并将控件置于顶层。再加两个groupbox容器,放置右侧,内部各塞一个 RichTextBox。
以下是主要代码编写内容:
1. TcpClient的创建和“连接”、“断开”按钮的简单代码实现
代码如下:
2. TcpClient的“数据接收”、”连接状态“的事件函数处理 和 “发送”按钮的简单代码实现
代码如下:
其中,跨UI线程的解决方式和原出处不同。原出处是通过关闭跨UI线程报错来解决问题,这里是调用Form的Invoke方法跨线程访问控件。
总结:STTech.ByteslO.Tcp这个nuget包使用起来很好,上手快,大数据量收发无错误。winform跨UI线程调用界面控件可以使用Invoke来实现。