WPF, c#,串口通信

本文关键字:通信 串口 WPF | 更新日期: 2023-09-27 18:14:16

我使用串口通信,有一个串口的DataReceived事件,其中如果标头&收到的数据匹配页脚,我正在执行2复杂&冗长的函数,这里我使用循环缓冲区来接收数据,

在2个函数中,第一个函数更新画布上2058字节的图形(面积图)&第二个函数在2058字节上执行一些复杂的计算。我每隔3秒收到这2058字节。

所以我的要求是,当我在另一边的缓冲区中填充数据时,我需要对已经在缓冲区中的数据执行这2个函数(因为它是循环缓冲区,它包含以前填充的数据)。

我在这里有点困惑,如何实现这种并发。我知道一些方法,

  1. 使用"任务"
  2. 使用'Threads'
  3. 使用'async &等待'
  4. 使用"任务并行库"
  5. 使用'Background Worker'
  6. 使用"Dispatcher.Invoke()的

目前我正在使用Dispatcher.Invoke(),这需要太多的时间为UI更新。所以这里有时间滞后。

请告诉我哪种方法反应更快。

WPF, c#,串口通信

从要完成的工作的大小来判断,并且由于这每三秒钟发生一次,我相信在线程池上执行任务和排队工作是您的最佳解决方案。

我不建议生成一个新的专用线程。

根据这个过程需要多长时间和你的配置,我认为你可以考虑在一个循环中运行少量的永久线程,并查询新接收到的数据队列进行处理(即创建你自己的线程池)。这可以通过使用ConcurrentQueue发送和接收数据来实现。你也可以从考虑TPL中受益。数据流,它可以极大地帮助在多线程环境中需要低延迟和高性能的情况。无论采用哪种解决方案,您都可以从研究Dataflow中的BufferBlock类中获益。

您可以使用1-5来完成复杂的工作(因为这些是针对这个场景的)。您可以使用6将结果注入到图中,因为Dispatcher的目的。调用是ui线程中的处理工作,大多数控件都需要调用。

我已经成功地管理了计时器和后台工作同步。

我注意到的唯一重要的事情是你需要一个好的处理器,至少是"core - i3"。

Mr.SKleanthous提出的解决方案也可以接受。谢谢。

谢谢Andreas m ller先生,我明白你的意思。

谢谢大家。