3

如果您将 300 字节的原始数据每秒 20 次解析成一堆 WPF 控件属性,您的解决方案是什么?

更具体地说,我有一个支持 Modbus 的 PLC,我需要制作一个 WPF HMI 来控制它。Modbus 是一种需要轮询数据更改的通信协议。相比之下,WPF 和 .NET 框架一般都提倡事件驱动模型,因此每秒 20 次将数据直接推送到控件中对我来说似乎很不自然。Modbus 不仅缺乏报告数据变化的手段,而且它不提供字节的高级表示,并且由开发人员正确地将一组无符号短裤分解成有意义的东西。

虽然解析这些数据对我来说没什么大不了的,但要正确转换为一堆启用事件的 DependencyProperties(假设为数据绑定)具有挑战性。我不希望有很多初始化代码或临时存储来监视更改。

4

1 回答 1

2

不必将循环轮询的数据放入依赖属性中。此类数据属性将仅用作绑定源,因此将它们放在实现INotifyPropertyChanged的​​类中就足够了。

我建议收集大约 10 个轮询周期的数据,并且每秒更新数据属性不超过两次。您肯定会在单独的线程中进行轮询,因此您应该确保通过Dispatcher.BeginInvoke在 UI 线程上调用PropertyChanged事件,如下面的代码所示:

public class DataCollector : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private byte[] someData;

    public byte[] SomeData
    {
        get { return someData; }
        set
        {
            someData = value;

            if (PropertyChanged != null)
            {
                Application.Current.Dispatcher.BeginInvoke(PropertyChanged, this, new PropertyChangingEventArgs("SomeData"));
            }
        }
    }
}
于 2012-03-20T09:50:36.183 回答