C# 串口同步收发与异步收发
时间: 2024-11-30 09:22:05 浏览: 23
C# 串口收发测试 软件创建串口组件,实现独立线程接收和数据处理。
5星 · 资源好评率100%
在C#中,串口通信通常可以分为同步(Synchronous)和异步(Asynchronous)两种模式。
**同步串口通信**(也称为阻塞式通信):
同步操作会阻塞当前线程直到数据传输完成。使用`System.IO.Ports.SerialPort`类,当你调用像`Write()`或`Read()`这样的方法时,程序会暂停执行,直到接收或发送完全结束。这种方法适合于数据交换量小、对响应时间要求不是特别高的情况。
示例代码:
```csharp
SerialPort sp = new SerialPort("COM1");
sp.Open();
sp.Write("Hello, serial!");
string response = sp.ReadLine(); // 程序会在这里等待直到接收到数据
sp.Close();
```
**异步串口通信**(非阻塞式通信):
异步通信允许程序在等待串口操作完成时继续执行其他任务。通过事件处理或回调函数,可以在数据准备好后触发特定操作。C#提供`SerialPortDataReceivedEventArgs`事件来监听数据的到达。`BeginWrite`和`EndRead`方法用于发起异步读取和写入操作。
示例代码:
```csharp
SerialPort sp = new SerialPort("COM1");
sp.Open();
// 异步写入
sp.BeginWrite("Async message", (asyncResult) =>
{
sp.EndWrite(asyncResult);
});
// 注册事件处理器监听数据接收
sp.DataReceived += (sender, e) => HandleDataReceived(sender, e);
void HandleDataReceived(object sender, SerialDataReceivedEventArgs e)
{
string receivedData = sp.ReadExisting(); // 这里不会阻塞,数据可用时会被触发
}
sp.Close();
```
阅读全文