Процесс вызова Fortran исполняемого файла из C # - PullRequest
1 голос
/ 17 февраля 2012

У меня есть исполняемый файл fortran, который я пытаюсь запустить с процессом. Исполняемый файл fortran запрашивает файл у пользователя, выполняет операцию по поиску решения, а затем, если существует несколько решений, он спрашивает пользователя, хочет ли он найти наиболее оптимальное решение. Мой код, который я здесь предоставил, кажется, всегда вылетает, когда я вызываю функцию wait для простоя ввода, так как, похоже, нет графического интерфейса. Я новичок в использовании процессов, поэтому, если кто-то может мне помочь, это будет оценено.

Спасибо.

Редактировать: Я забыл упомянуть, что исполняемый файл fortran генерирует текстовый файл после того, как предоставить результаты пользователю. Когда я удаляю ожидание простоя ввода, он больше не падает, но полученный текстовый файл больше не генерируется. Исполняемый файл работает неправильно?

        Process exeProcess = new Process();
        exeProcess.StartInfo.FileName = @"...\marcus12.exe";
        exeProcess.StartInfo.UseShellExecute = false;
        exeProcess.StartInfo.RedirectStandardError = true;
        exeProcess.StartInfo.RedirectStandardInput = true;
        exeProcess.StartInfo.RedirectStandardOutput = true;
        exeProcess.Start();
        //exeProcess.WaitForInputIdle();
        exeProcess.StandardInput.WriteLine(Path.GetFileName(filePath));
        //exeProcess.WaitForInputIdle();
        exeProcess.StandardInput.WriteLine("Y");
        exeProcess.WaitForExit();

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

WaitForInputIdle () используется, когда запускаемый вами процесс является приложением Windows с циклом обработки сообщений.В вашем случае это простое консольное приложение.

Поэтому все, что вам нужно, это исключить два вызова WaitForInputIdle () из кода:

Process exeProcess = new Process();
exeProcess.StartInfo.FileName = @"...\marcus12.exe";
exeProcess.StartInfo.UseShellExecute = false;
exeProcess.StartInfo.RedirectStandardError = true;
exeProcess.StartInfo.RedirectStandardInput = true;
exeProcess.StartInfo.RedirectStandardOutput = true;
exeProcess.Start();
exeProcess.StandardInput.WriteLine(Path.GetFileName(filePath));
exeProcess.StandardInput.WriteLine("Y");
exeProcess.WaitForExit();
0 голосов
/ 17 февраля 2012

Просто удалите две строки exeProcess.WaitForInputIdle();, они не нужны в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...