C# 异步串行通信

C# 异步串行通信,c#,multithreading,async-await,task,C#,Multithreading,Async Await,Task,我正在从串行设备读取数据。软件应该做一些我称之为实时监控的事情。该装置由汽车的电子控制单元控制 在我的GUI上,我想启动监视。要获取数据,需要向ECU发送一个3字节的数组。之后,ECU回复一个数据包。这个数组应该被解析并返回给主线程进行进一步处理。然后向ECU发送一个新的请求,接收数据,解析后发送回主线程等等。一次又一次,直到我停止线 最好的方法是什么?使用async和wait,Backgroundworker,Task或TaskFactory?在.NET串行端口类中,哪一个最适合?在异步请求中

我正在从串行设备读取数据。软件应该做一些我称之为实时监控的事情。该装置由汽车的电子控制单元控制

在我的GUI上,我想启动监视。要获取数据,需要向ECU发送一个3字节的数组。之后,ECU回复一个数据包。这个数组应该被解析并返回给主线程进行进一步处理。然后向ECU发送一个新的请求,接收数据,解析后发送回主线程等等。一次又一次,直到我停止线


最好的方法是什么?使用
async
wait
Backgroundworker
Task
TaskFactory
?在.NET串行端口类中,哪一个最适合?

在异步请求中调用同步调用时,可以忽略线程和回调,因为任务类的状态为Maschine,它将为您创建一个新线程,可以在“wait”中执行阻塞调用

列出的所有方法都将以与.NET串行端口类相同的方式工作。区别在于哪个更适合您。我不相信.NET SerialPort类支持async/await。@ErikPhilips不支持,但您可以使用
任务调用同步方法。运行
。无论您如何分割它,它都将使用线程,而不是一个完成端口。您可以发布一个代码片段,说明如何启动一个异步串行读取,从而不会阻塞主线程吗?
state Maschine将为您创建一个新线程,除非特别要求。