コード例 #1
0
 /// <summary>
 /// создаёт параметры для проверки в заданной точке
 /// </summary>
 /// <param name="provider"></param>
 /// <param name="coordinates"></param>
 public CheckerParameters(LimitsProviders provider, PointLatLng coordinates)
 {
     LimitsProvider   = provider;
     Coordinates      = coordinates;
     CheckByPos       = true;
     SpeedInclude     = null;
     DirectionInclude = null;
 }
コード例 #2
0
        /// <summary>
        /// кнопка проверить ряд
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonCheckRange_Click(object sender, EventArgs e)
        {
            try
            {
                Action <double> pcAction = new Action <double>((percent) =>
                {
                    try
                    {
                        if (this.InvokeRequired)
                        {
                            _ = this.Invoke(new Action(() => { progressBar1.Value = (int)percent; }));
                        }
                        else
                        {
                            progressBar1.Value = (int)percent;
                        }
                    }
                    catch (Exception) { }
                });

                Cursor = Cursors.WaitCursor;
                new Task(() =>
                {
                    //если выбран способ с помощью выбранных истоников ограничений
                    if (radioButtonSelectLimitsProvider.Checked)
                    {
                        LimitsProviders provider = radioButtonSelectLimitsProvider.Checked ? LimitsProviders.StaticLimits : LimitsProviders.Manual;
                        int error = (int)this.Invoke(new Func <int>(() =>
                        {
                            int er = 0;
                            if (provider == LimitsProviders.None)
                            {
                                _  = MessageBox.Show(this, "Необходимо выбрать истоник ограничений", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                er = 1;
                            }
                            if (provider == LimitsProviders.Manual)
                            {
                                _  = MessageBox.Show(this, "Для ручного ввода ограничений выберите соответствующий пункт", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                er = 1;
                            }
                            if (checkPoint.IsEmpty)
                            {
                                _  = MessageBox.Show(this, "Необходимо выбрать точку на карте", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                er = 1;
                            }
                            if (er == 1)
                            {
                                this.Cursor = Cursors.Arrow;
                            }
                            return(er);
                        }));

                        if (error == 1) //если произошла ошибка, то выход
                        {
                            return;
                        }

                        range = new Checker().ProcessRange(range, new CheckerParameters(provider, checkPoint), out CheckerInfo stats, pcAction);
                        _     = this.Invoke(new Action(() =>
                        {
                            _ = MessageBox.Show(this, $"Ряд исправлен, результаты:\r\nНаблюдений в исходном ряде: {stats.Total}\r\nПовторов дат: {stats.DateRepeats}\r\nПревышений диапазонов: {stats.OverLimits}\r\nНулевая скорость с направлением: {stats.OtherErrors}\r\nОсталось наблюдений: {stats.Remain}", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            if (range == null)
                            {
                                DialogResult = DialogResult.Cancel;
                            }
                            else
                            {
                                DialogResult = DialogResult.OK;
                                Result       = range;
                            }
                            Cursor = Cursors.Arrow;
                            Close();
                        }));
                    }

                    //если выбран способ вручную вводить ограничения
                    if (radioButtonEnterLimits.Checked)
                    {
                        _ = this.Invoke(new Action(() =>
                        {
                            if (speedDiapasons == null)
                            {
                                _ = MessageBox.Show(this, "Необходимо ввести ограничения для скоростей ветра", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                return;
                            }
                            if (directionDiapasons == null)
                            {
                                _ = MessageBox.Show(this, "Необходимо ввести ограничения для направлений ветра", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                return;
                            }
                        }));
                        range      = new Checker().ProcessRange(range, new CheckerParameters(speedDiapasons, directionDiapasons), out CheckerInfo stats, pcAction);
                        range.Name = "Исправленный ряд";
                        _          = this.Invoke(new Action(() =>
                        {
                            _ = MessageBox.Show(this, $"Ряд исправлен, результаты:\r\nНаблюдений в исходном ряде: {stats.Total}\r\nПовторов дат: {stats.DateRepeats}\r\nПревышений диапазонов: {stats.OverLimits}\r\nНулевая скорость с направлением: {stats.OtherErrors}\r\nОсталось наблюдений: {stats.Remain}", "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            if (range == null)
                            {
                                DialogResult = DialogResult.Cancel;
                            }
                            else
                            {
                                DialogResult = DialogResult.OK;
                                Result       = range;
                            }
                            Cursor = Cursors.Arrow;
                            Close();
                        }));
                    }
                }).Start();
            }
            catch (ApplicationException exc)
            {
                Cursor       = Cursors.Arrow;
                _            = MessageBox.Show(this, exc.Message, "Проверка ряда", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                DialogResult = DialogResult.Cancel;
            }
        }