我阅读了Process.StandardOutput的文档,其中包含以下引用:
如果父进程在 p.StandardOutput.ReadToEnd 之前调用 p.WaitForExit 并且子进程写入足够的文本来填充重定向的流,则可能导致死锁情况。
所以我想知道。如果我还担心在某些情况下可能会填充 StandardError,那么正确的方法是什么?
我是否必须使用循环来交替读取标准输出和错误,以避免填满,或者这个简单的代码是否足够:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
在发布了一些答案后进行了编辑
那么这是正确的方法吗?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
然后,仅当该过程实际完成时,我才使用 stringbuilder 内容。
那是正确的方法吗?