使用异步等待方法异步读取串行端口
本文关键字:异步 读取 串行端口 方法 等待 | 更新日期: 2023-09-27 18:31:20
我用这种方式从串口读取:
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Debug.Print("Data Received:");
Debug.Print(indata);
}
众所周知,这种 API 称为基于事件的异步模式 (EAP),我想使用 Async Await 方法编写上面的代码。
PS:使用上面的代码有时我得到的数据错误
提前致谢
您还可以从 SerialPort.BaseStream 读取数据。 它是 Stream 类型,因此支持可等待的 ReadAsync() 方法。 将其转换为字符串取决于您,使用正确的编码。 SerialPort 的默认值为 ASCIIEncoding。