公司动态

C# 多个串口多个线程发送数据和接收数据

📅 2026/8/29 21:36:14
C# 多个串口多个线程发送数据和接收数据
目录1. 创建串口对象2. 创建线程用于发送和接收数据使用Thread类使用Task类3. 启动线程/任务并管理资源4. 优雅地关闭串口和线程/任务可选5. 处理异常和错误可选如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。在C#中实现多个串口通信同时使用多个线程发送和接收数据可以通过以下几个步骤来实现1. 创建串口对象首先需要创建一个SerialPort对象并配置其参数如波特率、数据位、停止位等。using System.IO.Ports;SerialPort serialPort new SerialPort(COM1){BaudRate 9600,Parity Parity.None,DataBits 8,StopBits StopBits.One,Handshake Handshake.None,ReadTimeout 500,WriteTimeout 500};2. 创建线程用于发送和接收数据为了使用多个线程你可以使用Thread类或者更现代的Task类推荐使用Task因为它提供了更多的灵活性和功能。使用Thread类Thread sendThread new Thread(SendData);Thread receiveThread new Thread(ReceiveData);void SendData(){serialPort.Open();while (true) // 或者其他条件判断退出循环{if (serialPort.IsOpen){string dataToSend Hello; // 发送的数据serialPort.WriteLine(dataToSend); // 或者 serialPort.Write(dataToSend);Thread.Sleep(1000); // 等待1秒再发送}}}void ReceiveData(){serialPort.Open();while (true) // 或者其他条件判断退出循环{if (serialPort.IsOpen){string receivedData serialPort.ReadLine(); // 或者 serialPort.ReadExisting();Console.WriteLine(Received: receivedData);}}}使用Task类Task sendTask Task.Run(() SendData());Task receiveTask Task.Run(() ReceiveData());void SendData(){serialPort.Open();while (true) // 或者其他条件判断退出循环{if (serialPort.IsOpen){string dataToSend Hello; // 发送的数据serialPort.WriteLine(dataToSend); // 或者 serialPort.Write(dataToSend);Task.Delay(1000).Wait(); // 等待1秒再发送}}}void ReceiveData(){serialPort.Open();while (true) // 或者其他条件判断退出循环{if (serialPort.IsOpen){string receivedData serialPort.ReadLine(); // 或者 serialPort.ReadExisting();Console.WriteLine(Received: receivedData);}}}3. 启动线程/任务并管理资源启动线程或任务并在不再需要时适当地关闭串口并结束线程或任务。例如sendThread.Start(); // 或者 await sendTask; 对于Task使用await关键字在async方法中启动。receiveThread.Start(); // 或者 await receiveTask; 对于Task使用await关键字在async方法中启动。4. 优雅地关闭串口和线程/任务可选当不再需要发送或接收数据时应该优雅地关闭串口和结束线程或任务。例如serialPort.Close(); // 关闭串口。对于多线程或多任务环境确保在所有发送/接收操作完成后再调用。可以使用同步锁或事件来控制。// sendThread.Abort(); // 不推荐使用Abort因为它可能导致资源未释放等问题。更好的方式是设置一个标志位来控制循环的退出。例如bool stop true; 当需要停止时设置stoptrue; 在循环中检查stop。对于Task可以使用TaskCompletionSource。5. 处理异常和错误可选在发送和接收数据的方法中添加异常处理逻辑以便在发生错误时能够优雅地处理try { /* 发送或接收代码 */ }catch (Exception ex) { Console.WriteLine(Error: ex.Message); }这样你就可以在C#中使用多个线程来管理多个串口的发送和接收数据了。示例代码仅供参考。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。