2012-02-17 32 views
1

我有一个fortran可执行文件,我试图用一个进程运行。 Fortran可执行文件向用户请求文件,执行操作以查找解决方案,之后如果有多个解决方案,它会询问用户是否希望找到最佳解决方案。我提供的代码在我调用等待输入空闲时似乎总是崩溃,因为似乎没有gui。我不熟悉使用流程,所以如果有人可以帮助我,那将不胜感激。从C#调用Fortran可执行文件的进程

谢谢。

编辑:我忘了提及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(); 
+0

您不需要等待。 – SLaks 2012-02-17 19:26:05

+0

感谢您的回应,它不再崩溃,但现在可执行文件没有生成正确的输出(请参阅编辑),这让我质疑它是否正常运行。 – BeingIan 2012-02-17 19:43:10

+0

阅读标准输出和错误,看看会发生什么 – SLaks 2012-02-17 20:41:27

回答

0

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

因此,所有你需要的是排除2 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

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

相关问题