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); } }