/// <summary> /// Разгребатель результата /// </summary> private void BuildPacketResult() { //Ждем первого получения пакетов _mres.Wait(10000); const int maxCount = 50; do { if (_mres.IsSet) { _mres.Reset(); } if (!_stackForBuildResult.IsEmpty) { var packet = new TMonitoringAnalyseResult[maxCount]; var recivedCount = _stackForBuildResult.TryPopRange(packet, 0, maxCount); if (recivedCount == 0) { continue; } for (int i = 0; i < recivedCount; i++) { StartBuildVisual(packet[i]); } _progressBar.IncValue(recivedCount); } else { _mres.Wait(10000); } } while (!_isRequestCompleted || !_stackForBuildResult.IsEmpty); }
private void StartBuildVisual(TMonitoringAnalyseResult analyseResult) { TMonitoringAnalyseRow row; if (analyseResult == null || !MonitoringAnalyseDict.TryGetValue(analyseResult.ParentId, out row) || row == null) { return; } var localSumm = new TStatisticInformation //Инициализация локальной статистики { DailyInformation = new Dictionary <DateTime, TStatisticInformation>(), }; row.Status = OperationStatus.Processing; bool?isError = null; //Для отслеживания ошибки в процессе выполнения //Запрос в БД row.UpdateMeters(IsMetersEnabled, ref isError, localSumm, analyseResult); //Если это Е422 то обновляем концентраторы if (analyseResult.Children != null && analyseResult.Children.Count > 0 && row.ChildrenConcentrator.Count > 0) { foreach (var concentrator in row.ChildrenConcentrator) { var concentratorResult = analyseResult.Children.FirstOrDefault(a => a.ParentId.MonitoringHierarchy == concentrator.ID.MonitoringHierarchy && a.ParentId.Id == concentrator.ID.Id); if (concentratorResult != null) { concentrator.UpdateMeters(IsMetersEnabled, ref isError, localSumm, concentratorResult); concentrator.Status = isError.GetValueOrDefault() ? OperationStatus.Error : OperationStatus.Done; } } } row.MicrochartSource = localSumm.DailyInformation; row.Status = isError.GetValueOrDefault() ? OperationStatus.Error : OperationStatus.Done; }