gpt4 book ai didi

c# - pConsole.StartInfo.RedirectStandardOutput 和 pConsole.Exited 事件 (c#)

转载 作者:行者123 更新时间:2023-11-30 14:44:34 25 4
gpt4 key购买 nike

我有一个 GUI 应用程序(在新进程中)执行“控制台”应用程序并解析输出。要重定向输出,我将 pConsole.StartInfo.RedirectStandardOutput 设置为 true。我还订阅了事件 pConsole.Exited。

我看到的问题是我必须在 Exited 事件处理程序中使用 Thread.Sleep() 来获取最后的数据。

我的 Exited 事件处理程序如下所示:

Thread.Sleep(100); // Wait for additional data (if any).
pConsole.OutputDataReceived -= new System.Diagnostics.DataReceivedEventHandler(this.localTerminal_DataAvailableEvent);
int exit = pConsole.ExitCode;
pConsole.Dispose();
pConsole = null;

似乎 Exited 事件在我最后一个 pConsole_DataAvailableEvent 之前执行。任何人都知道这是如何/为什么发生的?

我还使用互斥/锁来确保我的 Exited 事件在我开始执行下一个控制台应用程序之前完成。

最佳答案

问题几乎可以肯定是输出缓冲:进程退出,触发您的 Exited 事件,但一些输出数据仍在缓冲区中。您的 hack 在某些情况下可能会奏效,但其他方法可能更可靠。考虑:

1) 消除 Exited 事件处理程序,而是检查 OutputDataReceived 处理程序中的 Process.HasExited。

2) 不要使用 OutputDataReceived 处理程序,而只需调用 Process.StandardOutput 流上的 Read()。流关闭后进行后处理清理。

关于c# - pConsole.StartInfo.RedirectStandardOutput 和 pConsole.Exited 事件 (c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/258339/

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