Beispiel #1
0
        private void GetAnalyse()
        {
            _grid.DetailConfigurations.Clear();
            _viewSource.DisposeChildren();
            _viewSource.Clear();

            if (!dateStart.SelectedDate.HasValue || !dateEnd.SelectedDate.HasValue)
            {
                Manager.UI.ShowMessage("Необходимо корректно задать начальную и конечную даты!");
                progress.Abort();
                return;
            }

            #region проверяем входящие параметры

            HashSet <int> uspds;
            HashSet <int> tis;
            var           filterObjectsList = GetSelectedObjects(true, out uspds, out tis);
            if (filterObjectsList != null && filterObjectsList.Count == 0 && tis != null && tis.Count == 0)
            {
                Manager.UI.ShowMessage("Необходимо выбрать хотя бы один объект или ТИ для мониторинга!");
                progress.Abort();
                return;
            }

            switch (
                ValidHelper.Valid(enumTimeDiscreteType.DBHours, 1000, dateEnd.SelectedDate.Value - dateStart.SelectedDate.Value,
                                  new Tuple <Xceed.Wpf.Controls.DatePicker, Xceed.Wpf.Controls.DatePicker>(dateStart, dateEnd), GetAnalyse)
                )
            {
            case enumRestartAfterValid.Abort:
                //Ошибка входящих параметров
                progress.Abort();
                return;

            case enumRestartAfterValid.Restart:
                return;
            }

            #endregion

            DateTime    dtStart;
            DateTime    dtEnd;
            double?     maxValue;
            bool        isConcentratorsEnabled;
            bool        isMetersEnabled;
            List <int>  selectedEvents;
            List <byte> selectedСhannels;

            GetParamsFromForm(out dtStart, out dtEnd, out maxValue, out isConcentratorsEnabled, out isMetersEnabled, out selectedEvents, out selectedСhannels);

            this.RunAsync(() => GetObjectsForAnalys(filterObjectsList, uspds, tis, dtStart, dtEnd, maxValue, isConcentratorsEnabled, isMetersEnabled, selectedEvents, selectedСhannels),
                          monitoringFactory =>
            {
                if (monitoringFactory == null || _grid == null)
                {
                    progress.Abort();
                    return;
                }

                ConfigureGrid(monitoringFactory.DtStart, monitoringFactory.DtEnd, monitoringFactory.IsConcentratorsEnabled, monitoringFactory.IsMetersEnabled);
                _viewSource.AddRange(monitoringFactory.MonitoringAnalyseDict.Values);

                var settings = VisualEx.GetModuleSettings(this);
                if (settings != null)
                {
                    Manager.Config.SaveModulesSettingsCompressed(this.GetType().Name, settings);
                }

                progress.Value   = 0;
                progress.Maximum = monitoringFactory.MonitoringAnalyseDict.Count;
                //Собрали в таблицу информацию по шлюзам и концентраторам
                //Теперь собираем информацию по ПУ для этих объектов
                worker = new BackgroundWorker {
                    WorkerSupportsCancellation = true
                };
                worker.DoWork             += WorkerDoWork;
                worker.RunWorkerCompleted += WorkerCompleted;
                worker.RunWorkerAsync(monitoringFactory);
            });
        }