5

我想到了以下场景:

我想(通过串口)向设备发送一些命令。该设备确实向我发送了连续的数据流(每秒最多 12000 个值)。

要控制某些设置,我需要一些按钮来向设备发送命令,以在数据流之前和期间开始/停止/更改设置。我也想实时绘制这些数据。我当然会过滤这些数据。同样在某些时间戳会有一个信号,表明我想剪掉接收到的数据的某个窗口。

这意味着我将有两个图表。我使用 WPF 已经取得了一些进展,但现在当我与下方图表交互(缩放/平移)时,上方图表冻结明显。这是因为两者都经常刷新!

工作(数据接收/过滤)是使用线程完成的,但绘图的更新必须在 ui 线程内完成。

任何想法如何解决这个问题?也许使用多个进程?

在此处输入图像描述

4

3 回答 3

3

您应该使用反应式扩展。它是为这种事情而建造的。

http://msdn.microsoft.com/en-us/data/gg577609.aspx

要求对响应式扩展 (RX) 进行清晰、生动的解释?

在第二个链接上,虽然主题是 javascript,但它所说的大部分内容都是关于 Reactive Extensions 和 cross-applies to Rx in C#。

于 2013-10-18T15:38:02.147 回答
2

我正在使用实时波形(大约 500Hz)制作一个类似的 WPF 应用程序。我有一个接收实时数据的后台线程,一个单独的线程来处理它们并准备用于绘图的数据(我有一个缓冲区,其中包含我放置准备好的值的屏幕“大小”)。在 UI 线程中,我将波形绘制到RenderTargetBitmap,最后渲染到 Canvas。这种技术可以让我在屏幕上有很多实时波形,并且可以毫无问题地进行缩放和平移(大约 40-50 fps)。

如果您需要一些技术细节,请告诉我,我稍后可以与您分享。

我认为您在 UI 线程中有一些代码没有很好地优化或者可以移动到后台线程。

顺便说一句,您是否使用任何图表框架?

编辑

philogon是对的,你应该使用 Rx 来获取实时数据,它简化了很多代码。我也在我的项目中使用它们。

于 2013-10-18T15:21:49.290 回答
1

它是一个商业产品,但有一个实时 WPF 图表可以处理这个用例,然后是一些。请看下面的教程:

http://www.scichart.com/synchronizing-chartmodifier-mouse-events-across-charts/

在此处输入图像描述

此处有此行为的实时 Silverlight 演示:

同步多图表鼠标 Silverlight 演示

这个图表应该能够在高速输入值时处理缩放:

实时性能演示

披露:我是 SciChart 的所有者和技术负责人

于 2014-04-25T10:40:33.620 回答