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