我正在尝试使用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);
该示例本身不会引发任何问题。
但是,当我想在下面将double[]
转换为Systems.Collections.Generic.IEnumerable<Object>
和AddRange
时,它将无法从ChartValues
转换为GearedValues
。
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[]
或以另一种方式在不删除旧点的情况下将多个点添加到图中的可能性?
答案 0 :(得分:0)
欢迎堆栈溢出!
似乎其他人已经在这里问过类似的问题:Convert List<double> to LiveCharts.IChartValues
您需要先将double[]
转换为IEnumerable<double>
,然后才能将其转换为IChartValues
集合。这可以通过ToList
中的System.Linq
扩展方法轻松完成:
using System.Linq;
...
var chartValues = temporalCv.ToList().AsChartValues();
SeriesCollection[1].Values.AddRange(chartValues);
我没有LiveCharts,因此无法直接测试。您可能只需要将temporalCv
转换为列表,然后让AddRange
进行其余操作:
var chartValues = temporalCv.ToList();