C# WPF实时图表应用体系结构

C# WPF实时图表应用体系结构,c#,wpf,charts,prism,C#,Wpf,Charts,Prism,我想到了以下情景: 我想(通过串口)向设备发送一些命令。此设备确实会向我发回连续的数据流(每秒最多12000个值) 为了控制一些设置,我需要一些按钮向设备发送命令,以便在数据流之前和期间启动/停止/更改设置。我还想对这些数据进行实时绘制。我当然会过滤这些数据。另外,在特定的时间戳处,会有一个信号,指示我要剪切接收数据的特定窗口 这意味着我将有两个图表。我已经在使用WPF方面取得了一些进展,但是现在当我与下面的图表交互(缩放/平移)时,上面的图表冻结了。这是因为两者都必须经常刷新 工作(数据接收/

我想到了以下情景:

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

为了控制一些设置,我需要一些按钮向设备发送命令,以便在数据流之前和期间启动/停止/更改设置。我还想对这些数据进行实时绘制。我当然会过滤这些数据。另外,在特定的时间戳处,会有一个信号,指示我要剪切接收数据的特定窗口

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

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

有没有办法解决这个问题?可能使用多个进程


我正在使用实时波形(约500Hz)制作一个类似的WPF应用程序。我有一个接收实时数据的后台线程,一个单独的线程来处理它们并为绘图准备数据(我有一个带有屏幕“大小”的缓冲区,我把准备好的值放在那里)。在UI线程中,我将波形绘制到RenderTargetBitmap,最后渲染到画布。这项技术让我在屏幕上有很多实时波形,并且缩放和平移工作没有任何问题(大约40-50 fps)

请让我知道,如果你需要一些技术细节,我可以稍后与你分享

我认为UI线程中有一些代码没有得到很好的优化,或者可以移动到后台线程

顺便说一句,你有没有使用任何图表框架

编辑


philologon是对的,您应该使用Rx来处理实时数据,它大大简化了代码。我也在我的项目中使用它们。

您应该使用被动扩展。它是为这种事情而建的


在第二个链接上,虽然主题是javascript,但大部分内容都是关于反应式扩展的,交叉应用于C#中的Rx。

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

这里有一个关于这种行为的现场Silverlight演示:

此图表应能在高速输入值时处理缩放:


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

我使用oxyplot。我在UI线程中做的唯一一件事就是给绘图赋值并更新它。据我所知,这必须在UI线程中完成。此外,如果我不更新绘图,我会获得较高的fps。你有一个你如何画波浪的例子吗?也许这已经给了我一些如何做得更好的提示。当然,明天我将分享一些例子。据我所知(我在这方面做了一个小调查),oxyplot对于实时数据不是很好。事实上,你没有太多的选择。()不错,但很过时。我不会在实际项目中使用它,但对于调查来说,它非常好。你可以用。你总是自己绘制图表,这就是我做的。我也做了一些调查。我找到了dynamicdatadisplay,但它确实不是最新的。我会看看Rx和Direct2D。虽然我对你的RenderTargetBitmap方法很感兴趣。我已经读过了,但从来没有找到一个好的例子。这真是太好了。我也在不同的线程中进行接收和处理。谢谢!嘿,佐伊德伯格先生,如果你能分享一个关于图像缩放和平移的例子,那就太好了。我想出了如何使用InteropBitmap来渲染我的图像。但也许你的例子会给我一些更好的想法。我也尝试过使用SharpDX,但它要复杂得多。