gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:12:14 24 4
gpt4 key购买 nike

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

最佳答案

当然可以。

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

一个使用循环的例子。一个简单的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com