gpt4 book ai didi

c# - 处理 RedirectStandardOutput 为空且 DataReceivedEventArgs.Data 为空

转载 作者:行者123 更新时间:2023-11-30 20:59:45 25 4
gpt4 key购买 nike

在控制台模式下运行应用程序时,会有一些行写入控制台。

现在我想以编程方式执行此操作。这是我使用的一些示例代码:MSDN on OutputDataReceived Event

private static StringBuilder _sortOutput = null;

var proc = new Process();
var info = new ProcessStartInfo();
info.FileName = @"C:\SomeApp.exe";

info.UseShellExecute = false;
info.WindowStyle = ProcessWindowStyle.Normal;
info.CreateNoWindow = false;

proc.StartInfo = info;

info.RedirectStandardOutput = true;
info.RedirectStandardError = true;

proc.OutputDataReceived += HandleOutputData;
proc.ErrorDataReceived += HandleOutputData;

proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();

proc.WaitForExit();

var exitCode = proc.ExitCode;
var output = _sortOutput.ToString();


private void HandleOutputData(object sender, DataReceivedEventArgs e)
{
_sortOutput.Append(e.Data);
}

但 DataReceivedEventArgs.Data 始终为 null,我无法取回在打开的控制台窗口中看到的结果。

如何接收输出?有办法实现吗?

更新

我也尝试直接读取 proc.StandardOutput,但它没有产生任何数据。

最佳答案

正如其他人所发现的,存在一个错误,其中 _sortOutput 将为空。但不管怎样,你是完全正确的:e.Data 可以而且将会是 null!

事实上,当执行调用的 AsyncStreamReader 到达正在执行的标准输出的 EOF 时,您的处理程序应该总是被调用时 e.Data 等于 null redirected - 这将在您正在运行的进程退出时发生。当然,除非您先注销 OutputDataReceived 事件处理程序,或者取消异步输出重定向。

关于c# - 处理 RedirectStandardOutput 为空且 DataReceivedEventArgs.Data 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360756/

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