예제 #1
0
 private void MeasurementsHistory_OnAddedNewMeasurement(SubtMeasurement m) // manager thread
 {
     if (_mainVM.EasyGuiTabIsSelected)
     {
         Dispatcher.CurrentDispatcher.Invoke(() =>
         {
             RaisePropertyChanged(() => Measurements);
             OnAddedNewMeasurement?.Invoke(m);
         });
     }
 }
        internal void MeasureIfNeeded(SubtLocalPeer subtLocalPeer) // manager thread
        {
            try
            {
                var now = subtLocalPeer.LocalPeer.DateTimeNowUtc;
                if (_initializedTime == null)
                {
                    return;
                }
                if (now < _initializedTime.Value.AddTicks(SubtLogicConfiguration.MeasurementInitializationTimeTicks))
                {
                    return;
                }



                if (_lastTimeMeasured == null || _lastTimeMeasured.Value.AddTicks(SubtLogicConfiguration.MeasurementsIntervalTicks) < now)
                {
                    _lastTimeMeasured = now;

                    // measure
                    var m = Measure(subtLocalPeer);

                    lock (_measurements)
                    {
                        _measurements.AddLast(m);
                        if (_measurements.Count > SubtLogicConfiguration.MaxMeasurementsCount)
                        {
                            _measurements.RemoveFirst();
                        }
                    }

                    OnAddedNewMeasurement?.Invoke(m);
                }
            }
            catch (Exception exc)
            {
                subtLocalPeer.HandleException(exc);
            }
        }