我有一个包含控制台应用程序以改善用户体验的 GUI。我正在使用 Process 类来分离控制台可执行文件。我希望控制台窗口出现,我将手动向它写入缩写输出。然后,一旦可执行文件完成,控制台窗口将关闭,控制权返回给 GUI。
但是,它是一个交互式程序,需要我重定向 StandardIn 和 StandardOut。问题是重定向输入的行为会阻止所有输出进入控制台。
我已经包含了所有的输出代码,但被注释掉了。实际上,将打开一个控制台窗口并出现提示,等待用户输入。如果我取消注释 RedirectStandardIn,窗口会出现,但只是保持空白。我是否误解了 Process.StandardInput 的作用?
class HandleExecutable
{
...
public void callExecutable(string executable, string args, string inputStr)
{
string commandLine = executable;
ProcessStartInfo psi = new ProcessStartInfo(commandLine);
psi.UseShellExecute = false;
psi.LoadUserProfile = false;
//psi.RedirectStandardOutput = true;
//psi.RedirectStandardError = true;
/* UNCOMMENT BELOW WILL CAUSE NO OUTPUT TO BE PUT TO THE CONSOLE */
//psi.RedirectStandardInput = true;
psi.WindowStyle = ProcessWindowStyle.Minimized;
psi.Arguments = args;
Process p = new Process();
p.StartInfo = psi;
try
{
p.Start();
//p.StandardInput.WriteLine(inputStr);
//p.BeginOutputReadLine();
//p.BeginErrorReadLine();
if (outputHandler != null) p.OutputDataReceived += outputHandler;
if (errorHandler != null) p.ErrorDataReceived += errorHandler;
p.WaitForExit();
p.Close();
p.Dispose();
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.Message);
}
}
}