通过串口读写数据,非常简单,只需要将控制拉到窗口位置即可,就可以在窗口的下方查看到串口控件的图标,点击图标,按下F4即可查看该串品的详细属性
也可以通过在代码中创建一个串口类,并在代码中直接操作串口收发数据
其中包括比较基础的端口名称、波特率、数据位、停止位、检验位等五个参数
也有只需要指定端口名称即可,其他参数保持默认
知识点:向串口发送数据并获取数据
只需要将serialPort加入至窗口中,并且指定其中的端口名及波特率,指定串口数据回应事件即可(DataReceived事件) 然后在窗口加载事件中,将serialPort打开即可 1,直接使用serialPort.writeLine方法即可将数据发送至端口 2,已为serialPort指定了数据回应事件,当有数据从串口中返回,事件即会响应
示例项目
系统启动三个后台线程,
一个线程对应到更新当前时间
一个线程定时发送AA1086至串口7,并从串口7获得返回的数据
一个线程定时获取串口1的数据(修改为不需要后台线程)
示例代码
两个基础类,线程及定时,存放在Common文件夹中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace MES_MonitoringClient.Common { /// <summary> /// 多线程任务 /// </summary> public class ThreadHandler { // Thread _TThread = null; //默认后台运行 private const bool default_isBackground = true; //默认不自动运行 private const bool default_autoRun = false; public ThreadHandler(System.Threading.ThreadStart startFunction) : this(startFunction, default_isBackground, default_autoRun) { } public ThreadHandler(System.Threading.ThreadStart startFunction, bool isBackground) : this(startFunction, isBackground, default_autoRun) { } /// <summary> /// 创建线程 /// </summary> /// <param name="startFunction">运行方法</param> /// <param name="isBackground">是否后台运行</param> /// <param name="autoRun">是否自动运行</param> public ThreadHandler(System.Threading.ThreadStart startFunction, bool isBackground, bool autoRun) { _TThread = new Thread(startFunction); //是否后台运行 _TThread.IsBackground = isBackground; //自动运行线程 if (autoRun) { _TThread.Start(); } } /// <summary> /// 开始线程 /// </summary> public void ThreadStart() { _TThread.Start(); } /// <summary> /// 查看线程执行状态 /// </summary> /// <returns></returns> public bool ThreadIsAlive() { return _TThread.IsAlive; } /// <summary> /// 查看线程 /// 前后台执行 /// </summary> /// <returns></returns> public string ThreadState() { return _TThread.ThreadState.ToString(); } /// <summary> /// 当前线程唯一托管标识符 /// </summary> /// <returns></returns> public int ThreadManagedThreadId() { return _TThread.ManagedThreadId; } /// <summary> /// 等待线程结束 /// </summary> public void ThreadJoin() { _TThread.Join(); } } }