c# - 连续获取方法数据,无需 while

标签 c# kinect propertychanged

我正在尝试从 Kinects 加速计获取数据,但它没有更改通知事件,因此为了获取数据,我现在正在使用 while 循环。有没有办法将 AccelerometerGetCurrentReading () 方法结果绑定(bind)到属性,然后使用 propertychanged 事件或其他事件?

最佳答案

当然。

  • 创建一个实现 INotifyPropertyChanged 的​​ AccelerometerReader 类。
  • 添加一个属性,该属性将代表您从加速度计读取的当前(最新)值。
  • 在属性 setter 中,让属性在值不同时触发 PropertyChanged 事件。
  • 实例化该类后,启动一个任务,该任务连续读取加速度计,并设置属性中的值。
  • 由于该值仅在发生更改时触发,因此只有在发生更改时才会通知任何观察者。
  • 明智的做法是在无限循环中添加延迟,或者添加计时机制,这样您只需每 x 毫秒读取一次
  • 您可能希望使该类成为一次性的,以便您可以停止任务或停止计时器。

使用循环的示例。使用一个简单的 bool 值来停止循环,并在处理对象时设置该 bool 值。 警告:此代码尚未经过测试!

class AccelerometerReader: INotifyPropertyChanged, IDisposable {
    #region Constructor

    public AccelerometerReader() {
        new Task(ReadAccelerometer).Start();
    }

    #endregion
    #region INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    void FirePropertyChanged(string propertyName) {
        var propertyChanged = PropertyChanged;
        if (propertyChanged != null) {
            propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
    #region Properties

    int _value;
    public int Value {
        get { return _value; }
        set { 
            if (value != _value) {
                _value = value;
                FirePropertyChanged("Value");
            }
        }
    }

    #endregion
    #region Accelerometer reading

    bool _stopLoop = false;

    void StartReadLoop() {
        while (!_stopLoop) {
            Value = ReadAccelerometer();
            // TODO: Delay a little
        }
    }

    int ReadAccelerometer() {
        // TODO: Read from accelerometer...
    }

    #endregion
    #region IDisposable

    public void Dispose() {
        _stopLoop = true;

        // TODO: Add a proper IDisposable implementation
    }

    #endregion
}

关于c# - 连续获取方法数据,无需 while,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833158/

相关文章:

c++ - 带回调的 SWIG C++ 绑定(bind)

C#和Kinect手势时间

c# - 通过 Action 而不是 Hook PropertyChanged?

WPF 过多的 PropertyChanged 事件

c# - 计算 Property Changed MVVM 上两个值的结果

c# - 如何递归地包含所有可导航属性以模拟延迟加载

c# - 域模型的耦合程度如何?

c# - 特定于 .net C# dataannotations 的 .NET 正则表达式

c# - 获取数组子集,无需像 C 中的指针那样进行复制

javascript - 通过 Web 套接字网络在 C# 服务器上传输 JSON 字符串数据