从C#调用Fortran可执行文件的过程

时间:2012-02-17 19:23:01

标签: c# process

我有一个fortran可执行文件,我正在尝试使用进程运行。 fortran可执行文件从用户请求文件,执行操作以找到解决方案,然后如果有多个解决方案,它将询问用户是否想要找到最佳解决方案。我在这里提供的代码似乎总是在我等待输入空闲时崩溃,因为似乎没有gui。我是新手使用流程,所以如果有人可以帮助我,那将不胜感激。

感谢。

编辑:我忘了提到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 :(得分:0)

只需删除两条exeProcess.WaitForInputIdle();行,在您的情况下不需要它们。

答案 1 :(得分:0)

当您启动的进程是带有消息循环的Windows应用程序时,使用WaitForInputIdle()。在您的情况下,它是简单的控制台应用程序。

因此,您只需要从代码中排除两个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();