我想在c#中读取cmd的连续输出流。我知道我可以重定向标准输出流并读取它。以下是代码:
System.Diagnostics.ProcessStartInfo pi= new System.Diagnostics.ProcessStartInfo(ProgramPATH,Params);
pi.RedirectStandardOutput = true;
pi.UseShellExecute = false;
pi.CreateNoWindow = true;
System.Diagnostics.Process proc= new System.Diagnostics.Process();
proc.StartInfo = pi;
proc.Start();
string result = proc.StandardOutput.ReadToEnd();
但这会立即给出整个输出。如果我用ping
参数发出-t
命令怎么办?我如何不断阅读这个流?
答案 0 :(得分:12)
您正在调用ReadToEnd
,这显然会阻止该进程终止。您可以反复拨打Read
或ReadLine
。但是,您应该考虑使用OutputDataReceived
等事件在或中使用 执行此操作。 (如果您正在使用事件,则需要调用BeginOutputReadLine
来启用事件 - 有关详细信息,请参阅MSDN示例。)
可能在另一个线程上读取的原因是,如果您需要从读取标准错误和标准输出,则需要确保该过程不会填满其缓冲区 - 否则写入时可能会阻塞,从而导致死锁。使用异步方法可以更轻松地处理这个问题。