在c#中不断读取控制台流

时间:2011-02-18 17:19:53

标签: c# process

我想在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命令怎么办?我如何不断阅读这个流?

1 个答案:

答案 0 :(得分:12)

您正在调用ReadToEnd,这显然会阻止该进程终止。您可以反复拨打ReadReadLine。但是,您应该考虑使用OutputDataReceived等事件在中使用 执行此操作。 (如果您正在使用事件,则需要调用BeginOutputReadLine来启用事件 - 有关详细信息,请参阅MSDN示例。)

可能在另一个线程上读取的原因是,如果您需要从读取标准错误和标准输出,则需要确保该过程不会填满其缓冲区 - 否则写入时可能会阻塞,从而导致死锁。使用异步方法可以更轻松地处理这个问题。