gpt4 book ai didi

c# - 异步使用 System.Diagnostics.Process,我应该如何确保在确定它已退出之前收到最后的输出?

转载 作者:行者123 更新时间:2023-11-30 15:42:36 29 4
gpt4 key购买 nike

考虑这个示例 C# 代码(不相关的部分被忽略):

using System.Diagnostics.Process;

var process = new Process();
var startInfo = process.StartInfo;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
process.EnableRaisingEvents = true;
process.OutputDataReceived += OutputHandler;
process.ErrorDataReceived += ErrorHandler;
process.Exited += ExitHandler;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();

现在,我想在没有更多输出(stdout/stderr)可供读取之后通知监听器该过程已完成。我如何在我的 ExitHandler 方法中确保所有剩余的 stdout/stderr 在确定进程真正完成之前由 OutputHandlerErrorHandler 处理?

最佳答案

当您显式使用 Process.WaitForExit(-1) 时会出现互锁。在 stdout 和 stderr 的异步读取器指示文件结束状态之前,它不会返回。在您的 Exited 事件处理程序中调用它。您必须使用 -1 的超时,否则这将不起作用。或者只是 WaitForExit()。没关系,您知道它已经退出了。

关于c# - 异步使用 System.Diagnostics.Process,我应该如何确保在确定它已退出之前收到最后的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333254/

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