AI智能
改变未来

C# 不到20行代码手把手教你写出串口接收工具

当我们初学串口的时候往往都是手无足措,手里没有一些成型可以运行的代码的时候就会特别烦躁,接下来就让我们完成一个最基本的串口“最小系统”吧:

1.窗体部分

我们可以使用一个combobox来选择串口,一个textbox显示接受数据,一个button进行连接操作

2.代码部分:

首先我们需要知道C#中已经给我们提供了一个serial类,可以直接设置相应参数,使用起来很方便。

//代码1SerialPort com = new SerialPort(); //首先new一个串口对象

接下来就是对它的初始化了

//代码2public void SerialInitialize() {com.BaudRate = 115200; //波特率com.PortName = comboBox1.SelectedItem.ToString(); //选择串口com.DataBits = 8; //数据位com.DataReceived += Sp_DataReceived;  //注册接收事件com.ReceivedBytesThreshold = 1;  //接收到一个字节就触发事件com.Encoding = Encoding.Default;  //设置编码,避免中文乱码com.Open();}

这里我们使用事件触发(因为C#已经给我们写好了方法所以偷个懒直接拿来用),
然后选择串口是利用了控件combobox,我们可以在初始化的时候写入这么一句:

//代码3comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());

这样就可以获得目前可以连接的串口了(如果需要实时扫描的话可以新建线程无限循环)。

接下来就是写接收数据的事件:

//代码4private void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e){while(com.BytesToRead>0)data += com.ReadExisting();  //数据读取,直到读完缓冲区数据this.Invoke((EventHandler)delegate{//定义一个textBox控件用于接收消息并显示TEST.AppendText(data + Environment.NewLine);});

这里的this.Invoke是一种跨线程用法,它可以跨线程访问我们的textbox控件,如果不用它的话就会提示你无法访问,或者你在主线程内不停刷新的话会导致整个程序未响应。

这个是跨线程访问UI的模板:

this.Invoke((EventHandler)delegate{//你要执行的操作});

3.整合

将相应代码放到对应控件中就ok了

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C# 不到20行代码手把手教你写出串口接收工具