我正在qaac.exe
拨打Process.Start()
(AAC编码器)。 qaac.exe
程序在编码时输出到同一行。我不确定它的技术术语是什么,但它导致程序即使完成处理文件也不会退出。这是我的代码:
string output = null;
var proc = new Process();
proc.StartInfo.FileName = "qaac.exe";
proc.StartInfo.Arguments = "-v256 -q2 file.wav";
proc.StartInfo.WorkingDirectory = @"C:\";
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
output = proc.StandardOutput.ReadToEnd();
output += "\r\n";
output += proc.StandardError.ReadToEnd();
proc.WaitForExit();
如果我将-s
参数(禁止控制台消息)传递给上面代码中的qaac.exe
应用程序,它可以正常工作。所以我的问题是如何从外部程序中获取输出,该外部程序写入控制台窗口中的同一行?
答案 0 :(得分:1)
qaac.exe
是否写入StandardError
?可能是因为the Process.StandardOutput文档提及它的缓冲区正在填满导致死锁。
//为避免死锁,请对至少一个流使用异步读取操作 //不要对两个重定向流的末尾执行同步读取。