从投票到活动的最佳方式是什么



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

更具体地说,我有一个启用Modbus的PLC,我需要制作一个WPF HMI来控制它。Modbus是一种通信协议,需要轮询数据更改。相比之下,WPF和.NET Framework通常提倡事件驱动模型,因此每秒将数据直接推送到控件中20次对我来说似乎不自然。Modbus不仅缺乏报告数据更改的手段,而且它也不能提供字节的高级表示,开发人员应该正确地将一组未签名的short分解为有意义的内容。

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

不需要将循环轮询的数据放入依赖属性中。这样的数据属性将仅用作绑定的源,因此将它们放在实现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"));
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新