Я предполагаю, что эта строка выполняется (и возвращается) до того, как процесс FORTRAN даже сможет прочитать ввод:
string output = exeProcess.StandardOutput.ReadToEnd();
Я не уверен на 100%, каков результат ReadToEnd();
на неограниченном потоке в этом случае.Правильный способ сделать это, как упомянуто Джоном Скитом здесь , состоит в том, чтобы читать из stdout в другом потоке или, что еще лучше, асинхронно, как описано здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline.aspx
Для потомков:пример:
var outputReader = new Thread(ReadOutput);
outputReader.Start(exeProcess);
где ReadOutput определяется примерно так:
public void ReadOutput(Object processState) {
var process = processState as Process;
if (process == null) return;
var output = exeProcess.StandardOutput.ReadToEnd();
// Do whetever with output
}
Создание вашего начального метода:
Process exeProcess = new Process();
exeProcess.StartInfo.FileName = "sdf45.exe";
exeProcess.StartInfo.UseShellExecute = false;
exeProcess.StartInfo.RedirectStandardError = true;
exeProcess.StartInfo.RedirectStandardInput = true;
exeProcess.StartInfo.RedirectStandardOutput = true;
exeProcess.Start();
//input file
exeProcess.StandardInput.WriteLine(Path.GetFileName(filePath));
//find optimal solution
exeProcess.StandardInput.WriteLine("Y");
var outputReader = new Thread(ReadOutput);
outputReader.Start(exeProcess);
exeProcess.WaitForExit();
outputReader.Join();