尝试使用Process
类及其async
功能。无法在程序退出之前弄清楚如何从Process
读取所有输出。请帮忙!!
这是我的代码,
void RunProcess()
{
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = CmdName,
Arguments = CmdArgs,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
}
};
using(process)
{
process.OutputDataReceived += Process_OutputDataReceived;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit(); // Even waiting for exit here.
_logger.Debug("End of process");
}
} // void RunProcess()
void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
_logger.Debug($"\t{e.Data}");
}
我有一个其他代码在调用RunProcess()
方法后至少再运行30到45秒,但是在日志中的任何地方都看不到我的进程的输出。
如果我同步运行程序,我会得到所有输出。但是在运行异步时看不到输出。有谁知道我做错了什么,拜托?
(更新问题以使其更清晰!)
我上面发布的代码有效,并且是最小的(剥离的验证,类等)。我正在寻找有关如何使程序停止直到在日志文件中捕获完整输出的建议。有没有人知道如果有一种方法可以通过WaitForExit
和事件调用的组合来实现,就像我在上面的代码中那样,好吗?似乎该过程首先完成并在它可以打印日志行之前终止事件处理程序。
非常感谢提前!!
答案 0 :(得分:0)
您可以更好地整理代码。制作一些课程来包含你的过程。看看如何做async / await。
删除下面的行并从流程中读取其自身的输出,而不是委派它。
process.OutputDataReceived += Process_OutputDataReceived;