我正在创建一个程序,它可以通过COM端口读取数据并实时在图表中绘制出来。使用MVVM原则显示数据时,当数据以大约10Hz发送时,这种方法运行良好。然而,从中读取数据的设备可以达到1kHz的刷新频率,即每分钟1000个数据集。这对于显示和更新简单文本框来说很好,但是由于更新发生得太快,所以破坏了图表。
我认为我现在需要做的是限制发送给订阅类和页面的更新事件数量,以便只发送有限量的数据,这样图表就有机会正确绘制。是否有一种自动限制的方法,或者您建议进行哪些代码调整以手动完成此操作?
下面是我的收集事件中的一个小代码片段:
每个数据集也有一个ID,可以用来手动检查更新的时间,这是一个想法。
我认为我现在需要做的是限制发送给订阅类和页面的更新事件数量,以便只发送有限量的数据,这样图表就有机会正确绘制。是否有一种自动限制的方法,或者您建议进行哪些代码调整以手动完成此操作?
下面是我的收集事件中的一个小代码片段:
void dataItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
NotifyPropertyChanged("dataItems");
NotifyPropertyChanged("lastItem");
// update any charts
NotifyPropertyChanged("AccelXData");
NotifyPropertyChanged("AccelYData");
NotifyPropertyChanged("AccelZData");
}
// handle property changes
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
每个数据集也有一个ID,可以用来手动检查更新的时间,这是一个想法。
dataItem
的id
是否是refreshRate/10
的倍数。这会增加一些延迟,但与安全变量结合使用时,可以防止崩溃,该变量不会被不断更新。 - Heiko Rothe