gpt4 book ai didi

c# - 在 C# 中连续读取控制台流

转载 作者:太空狗 更新时间:2023-10-29 21:06:52 25 4
gpt4 key购买 nike

我想在 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# 中连续读取控制台流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com