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