gpt4 book ai didi

C#进程不接收输入

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:45 25 4
gpt4 key购买 nike

我有一个调用 fortran 可执行文件的进程。可执行文件向用户请求文件并执行操作以找到解决方案。如果在文件中找到多个解决方案,程序将询问用户是否要找到最佳解决方案,基本上是程序的 2 个输入。然后,可执行文件会生成一个提供程序结果的文本文件。

该进程能够运行,但不会生成生成的文本文件。此外,当我检查应用程序的输出时,消息提示(“输入文件”)是唯一存储在字符串中的东西,它不包括最佳解决方案的辅助提示(“你想找到最佳解决方案?”)。谁能告诉我为什么会这样?谢谢。

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");
string output = exeProcess.StandardOutput.ReadToEnd();
exeProcess.WaitForExit();

最佳答案

我的猜测是这一行在 FORTRAN 进程甚至有机会读取输入之前就已经执行(并返回)了:

string output = exeProcess.StandardOutput.ReadToEnd();

在这种情况下,我不是 100% 确定 ReadToEnd(); 在无界流上的结果是什么。执行此操作的正确方法,如 Jon Skeet 所述 here , 是从另一个线程中的 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();

关于C#进程不接收输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com