【问题标题】:C# asynchronous serial CommunicationC#异步串行通信
【发布时间】:2015-11-21 15:56:30
【问题描述】:

我正在从串行设备读取数据。该软件应该做一些我称之为实时监控的事情。该设备是来自汽车的 ECU。

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

最好的方法是什么?使用asyncawaitBackgroundworkerTaskTaskFactory?哪个最适合 .NET 串行端口类?

【问题讨论】:

  • 所有列出的方法都将以相同的方式使用 .NET 串行端口类。区别在于哪一个对更好看。
  • 我不相信 .NET SerialPort 类支持异步/等待。
  • @ErikPhilips 没有,但您可以使用 Task.Run 调用同步方法。
  • 不管你怎么切片,它都会使用线程,而不是完成端口。
  • 您能否发布一个代码 sn-p 如何启动不会阻塞主线程的异步串行读取?

标签: c# multithreading async-await task


【解决方案1】:

在异步请求中调用同步调用时,您可以忽略线程和回调,因为具有状态 Maschine 的 Task 类将为您创建一个新线程,请随意在“等待”中进行阻塞调用

【讨论】:

  • state Maschine will make a new thread for you - no it won't,除非特别要求。
猜你喜欢
  • 1970-01-01
  • 2016-11-25
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多