///// <summary> ///// Starts continuously sampling the sensor. ///// ///// This method also starts raising `Changed` events and IObservable ///// subscribers getting notified. ///// </summary> public void StartUpdating(int standbyDuration = 1000) { // thread safety lock (_lock) { if (IsSampling) { return; } // state muh-cheen IsSampling = true; //SamplingTokenSource = new CancellationTokenSource(); //CancellationToken ct = SamplingTokenSource.Token; AccelerationConditions oldConditions; AccelerationConditionChangeResult result; var task1 = new Thread(new ThreadStart(() => { while (true) { if (!IsSampling) { // do task clean up here //_observers.ForEach(x => x.OnCompleted()); break; } // capture history oldConditions = AccelerationConditions.From(Conditions); // read Update(); // build a new result with the old and new conditions result = new AccelerationConditionChangeResult(oldConditions, Conditions); // let everyone know RaiseChangedAndNotify(result); // sleep for the appropriate interval Thread.Sleep(standbyDuration); } })); task1.Start(); } }
public static AccelerationConditions From( AccelerationConditions conditions) => new AccelerationConditions(conditions.XAcceleration, conditions.YAcceleration, conditions.ZAcceleration, conditions.XGyroscopicAcceleration, conditions.YGyroscopicAcceleration, conditions.ZGyroscopicAcceleration);