public void OnStateChanged(IDataProvider aDataProvider) { logger.Info("Уведомление о изменении состояния."); if (!IsInitialized()) { return; } try { var currentSystemState = aDataProvider.GetCurrentSystemState(); if (IsEndOfScanning(currentSystemState)) { endSlabScanTime = DateTime.Now; if (endSlabScanTime - startSlabScanTime >= minimumScanTime) { logger.Info("Время сканирования: " + (endSlabScanTime - startSlabScanTime)); var slabId = GetNewSlabId(); StoreSensorValues(slabId); var slabModel = slabBuilder.BuildSlabModel(aIsUseFilters: true); dimentionCalculator.CalculateDimentions(slabModel); var dimentionValues = dimentionValueContainer.GetDimentionValues(); dimentionValueWriter.WriteDimentionValues(slabId, dimentionValues); UpdateStandartSizeId(slabId, DetermineStandartSize(dimentionValues)); } else { logger.Info("Ложное срабатывание: сканирование длилось меньше временной отсечки."); } } else { // начало сканирования. startSlabScanTime = DateTime.Now; } lastSystemState = currentSystemState; } catch (Exception ex) { logger.Info("Ошибка после завершения сканирования: " + ex.Message + "\n" + "Stack trace: " + ex.StackTrace); } finally { sensorValueContainer.Clear(); dimentionValueContainer.Clear(); } }