C#学习教程:在c#中不断读取控制台流分享


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

我想在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(); 

但这会立即产生整个输出。 如果我用-t参数发出ping命令怎么办? 我如何不断阅读这个流?

你正在调用ReadToEnd ,它会明显阻塞,直到进程终止。 您可以反复调用ReadReadLine 。 但是,您应该考虑在不同的线程中执行此操作, 或者使用诸如OutputDataReceived事件来执行此操作。 (如果您正在使用事件,则需要调用BeginOutputReadLine来启用事件 – 有关详细信息,请参阅MSDN示例。)

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

上述就是C#学习教程:在c#中不断读取控制台流分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/960029.html

发表评论

邮箱地址不会被公开。 必填项已用*标注