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

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

1.窗体部分

我们可以使用一个combobox来选择串口,一个textbox显示接受数据,一个button进行连接操作
C# 不到20行代码手把手教你写出串口接收工具_第1张图片

2.代码部分:

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

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

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

//代码2
public 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,我们可以在初始化的时候写入这么一句:

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

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

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

//代码4
private 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了

你可能感兴趣的:(c#,串口,串口工具,c#,串口通信)