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); }
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(); } }