C#-进程-异步-读取所有输出

C#-进程-异步-读取所有输出,c#,asynchronous,process,C#,Asynchronous,Process,尝试使用进程类及其异步功能。在程序退出之前,无法理解如何从进程读取所有输出。请帮忙 这是我的密码 void RunProcess() { Process process = new Process { StartInfo = new ProcessStartInfo { FileName = CmdName, Arguments = CmdArgs, CreateNoWindow = true,

尝试使用
进程
类及其
异步
功能。在程序退出之前,无法理解如何从
进程
读取所有输出。请帮忙

这是我的密码

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
和事件调用来实现这一点吗?似乎流程首先完成并在打印日志行之前终止事件处理程序


非常感谢

您可以更好地组织代码。创建一些类来包含您的进程。看看如何进行异步/等待

删除下面的行,并读取进程本身的输出,而不是委派它

  process.OutputDataReceived += Process_OutputDataReceived;

此外,这篇文章还提供了如何使用代表的信息。谢谢!现在我将研究
async/await
。您是如何同步启动新流程的?新流程是与当前流程分开的流程。我看到您设置了一个
WaitForExit
块。这就是你说的synch/async吗?@P.Brian.Mackey是的。我的意思是从
进程\u OutputDataReceived
事件异步。我的印象是,由于
WaitForExit
,事件应该在进入下一行之前打印所有数据。显然,我错过了一些东西;将查看下面的
async/await
。@您能解释一下原因吗?