Exemple #1
0
        private static bool UseDummyExternalApplication(Model initModel, string externalAppPath)
        {
            try
            {
                TextModelProvider.WriteModel(initModel, textProviderSettings);
            }
            catch (Exception ex)
            {
                MessageBoxHelper.ShowError("Не удалось создать файлы с данными о модели\nОригинальное сообщение: " + ex.Message);
                return(false);
            }

            // Запустим программу на выполнение
            ProcessStartInfo midPrgInfo = new ProcessStartInfo();

            midPrgInfo.FileName         = externalAppPath;
            midPrgInfo.WorkingDirectory = Path.GetDirectoryName(externalAppPath);
            midPrgInfo.UseShellExecute  = true;

            Process extAppProc = Process.Start(midPrgInfo);

            extAppProc.EnableRaisingEvents = true;

            // Дождемся, пока внешний процесс не завершится
            while (!extAppProc.HasExited)
            {
                Thread.Sleep(500);
            }

            // Распарсим результат
            ParseTextResults(initModel);

            return(true);
        }
Exemple #2
0
 private static void ParseTextResults(Model initModel)
 {
     try
     {
         TextModelProvider.ReadResultToModel(initModel, textProviderSettings);
     }
     catch (Exception ex)
     {
         MessageBoxHelper.ShowError("Невозможно считать файл с результатами расчета\nОригинальное сообщение: " + ex.Message);
         return;
     }
 }
Exemple #3
0
        private void btnNext_Click(object sender, EventArgs e)
        {
            // Очистим любые значения критериев и ограничений,
            // какие только там могли быть
            foreach (KeyValuePair <TId, Experiment> exp in this._model.Experiments)
            {
                exp.Value.CriterionValues.Clear();
                exp.Value.ConstraintValues.Clear();
            }

            if (this.rbnAutomatic.Checked)
            {
                // Автоматическая генерация

                // Соберем данные, проверим, все ли есть
#if DUMMY
                string externalAppPath = this.txtModelExecutable.Text.Trim();
#else
                string externalAppPath = this.txtExternalApplicationExecutable.Text.Trim();
                string dataFilePath    = this.txtDataFileName.Text.Trim();
                if (string.IsNullOrEmpty(dataFilePath))
                {
                    MessageBoxHelper.ShowExclamation("Для проведения автоматического расчета необходимо выбрать файл обмена данными между этим приложением и программой, которая его осуществит");
                    return;
                }
#endif
                if (string.IsNullOrEmpty(externalAppPath))
                {
                    MessageBoxHelper.ShowExclamation("Для проведения автоматического расчета необходимо выбрать внешнее приложение, которое его осуществит");
                    return;
                }

                // Если все на месте, то отключим юзера,
                // чтоб не мешал
                this.DisableUser(true);
                // Спросим, хочет ли он запустить авторасчет?
                DialogResult result = MessageBox.Show(
                    "Сейчас будет запущено внешнее приложение, выполняющее расчет значений критериев оптимальности и функциональных ограничений\nПока оно будет работать, " +
                    Program.ApplicationSettings.ApplicationName + " будет оставаться неактивным и ожидать завершения расчета\nЗапустить расчет?",
                    Program.ApplicationSettings.ApplicationName,
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
#if DUMMY
                    try
                    {
                        TextModelProvider.WriteModel(this._model, textProviderSettings);
                    }
                    catch (Exception ex)
                    {
                        MessageBoxHelper.ShowError("Не удалось создать файлы с данными о модели\nОригинальное сообщение: " + ex.Message);
                        return;
                    }

                    // Запустим программу на выполнение
                    ProcessStartInfo midPrgInfo = new ProcessStartInfo();
                    midPrgInfo.FileName         = externalAppPath;
                    midPrgInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(externalAppPath);
                    midPrgInfo.UseShellExecute  = true;

                    Process extAppProc = Process.Start(midPrgInfo);
                    extAppProc.EnableRaisingEvents = true;
                    extAppProc.Exited += extAppProc_Exited;
#else
                    // Запишем файл модели
                    try
                    {
                        modelProvider.Save(this._model, dataFilePath);
                    }
                    catch (Exception ex)
                    {
                        MessageBoxHelper.ShowError("Не удалось создать файл для обмена данными по указанному пути\nОригинальное сообщение: " + ex.Message);
                        return;
                    }
                    // Дождемся, пока будет создан файл
                    bool fileExists = false;
                    while (!fileExists)
                    {
                        if (System.IO.File.Exists(dataFilePath))
                        {
                            fileExists = true;
                        }
                        else
                        {
                            Thread.Sleep(500);
                        }
                    }
                    // Запуск внешней проги и ожидание расчета
                    ProcessStartInfo midPrgInfo = new ProcessStartInfo();
                    midPrgInfo.FileName        = externalAppPath;
                    midPrgInfo.Arguments       = "\"" + dataFilePath + "\"";
                    midPrgInfo.UseShellExecute = false;

                    Process extAppProc = Process.Start(midPrgInfo);
                    extAppProc.EnableRaisingEvents = true;
                    extAppProc.Exited += new EventHandler(extAppProc_Exited);
#endif
                }
                else
                {
                    // Опять включим юзера
                    this.DisableUser(false);
                }
            }
            else if (this.rbnManual.Checked)
            {
                // Если ввод ручной, покажем форму для этого
                this._nextForm = new Form40(this, this._model);
                this._nextForm.Show();
                this.Hide();
            }
            else if (this.rbnExpressionsEvaluate.Checked)
            {
                // Вычисление по введенным выражениям
                try
                {
                    ExpressionEvaluator.CalculateCriteriaValues(this._model);
                }
                catch (Exception ex)
                {
                    MessageBoxHelper.ShowError(ex.Message);
                    return;
                }

                try
                {
                    if (this._model.FunctionalConstraints.Count > 0)
                    {
                        ExpressionEvaluator.CalculateConstraintsValues(this._model);
                    }
                }
                catch (Exception ex)
                {
                    MessageBoxHelper.ShowError(ex.Message);
                    return;
                }
                this._nextForm = new Form45(this, this._model);
                this._nextForm.Show();
                this.Hide();
            }
        }