实时图表 AddRange 不适用于数组或系列集合

Live Charts AddRange not working with arrays or Series Collection

我正在尝试使用 Live Charts Geared WPF 创建尽可能轻的实时绘图仪,每秒采样大约 125 个点。定期逐点添加效果很好,只是 CPU 利用率太高了。

我想一次画几个点,从缓冲区中读取值,类似于网站示例:

var temporalCv = new double[1000];

for (var i = 0; i < 1000; i++){
    temporalCv[i] = 5;
}

var cv = new ChartValues<double>();
cv.AddRange(temporalCv);

示例本身不会引发任何问题。 但是,当我想将 AddRange 转换为 ChartValues 和下面的 GearedValues 时,它会抛出无法从 double[] 转换为 Systems.Collections.Generic.IEnumerable<Object>

SeriesCollection = new SeriesCollection
            {
                new GLineSeries
                {
                    Title = "Pressure",
                    Values = new GearedValues<double> {},

                },
                new LineSeries
                {
                    Title = "Pulse",
                    Values = new ChartValues<double> { },
                }
            };

SeriesCollection[1].Values.AddRange(temporalCv);

我也试过将数组更改为 GearedValue<double> 类型,但是当我想向数组添加双精度值时它仍然会抛出问题。

是否有转换 double[] 或其他方法将多个点一起添加到图中而不删除旧点?

欢迎来到 Stack Overflow!

看来其他人已经在这里问过类似的问题:Convert List<double> to LiveCharts.IChartValues

您需要先将 double[] 转换为 IEnumerable<double>,然后才能将其转换为 IChartValues collection。这可以通过 System.Linq:

中的 ToList 扩展方法轻松完成
using System.Linq;
...
var chartValues = temporalCv.ToList().AsChartValues();
SeriesCollection[1].Values.AddRange(chartValues);

我没有 LiveCharts,所以无法直接测试。您可能只需要将 temporalCv 转换为列表,让 AddRange 完成剩下的工作:

var chartValues = temporalCv.ToList();