.net 实时波形图

.net 实时波形图,.net,wpf,graphics,gdi+,waveform,.net,Wpf,Graphics,Gdi+,Waveform,我正试图想出一个好的设计来在.Net中绘制实时波形。每x毫秒添加一个样本,当波形位于页面末尾时,它会重置为开始,并开始覆盖现有波形(如ECG心率监视器中的波形) 在过去,我是用一种非常简单的方法来做这件事的:只需以固定的间隔为每个样本绘制一个像素。虽然这样做很好,但当我尝试添加任何类型的背景时,我很快就遇到了麻烦,例如:网格。当采样/像素与网格重叠时,在第二次扫描时清除它会变得复杂,因为不能仅用白色像素覆盖它 也许使用WPF代替Winforms会更容易,因为我可以将波形作为一个元素,当我移动元素

我正试图想出一个好的设计来在.Net中绘制实时波形。每x毫秒添加一个样本,当波形位于页面末尾时,它会重置为开始,并开始覆盖现有波形(如ECG心率监视器中的波形)

在过去,我是用一种非常简单的方法来做这件事的:只需以固定的间隔为每个样本绘制一个像素。虽然这样做很好,但当我尝试添加任何类型的背景时,我很快就遇到了麻烦,例如:网格。当采样/像素与网格重叠时,在第二次扫描时清除它会变得复杂,因为不能仅用白色像素覆盖它

也许使用WPF代替Winforms会更容易,因为我可以将波形作为一个元素,当我移动元素时,背景应该自动保留/重画


如何解决此问题?

您可以将曲线放入控件属性中的(或)中

<Canvas>
    <Path Stroke="Black" StrokeThickness="3">
        <Path.Data>
            <PathGeometry>
                <PathFigure x:Name="figure" IsClosed="False">
                    <PathFigure.Segments>
                        <PolyLineSegment x:Name="polyline"/>
                    </PathFigure.Segments>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
</Canvas>
figure.StartPoint = ...;
polyline.Points.RemoveAt(...);
polyline.Points.Add(...);