C# 同步读取进程的标准输出

C# 同步读取进程的标准输出,c#,.net,winforms,process,C#,.net,Winforms,Process,我正在执行一个exe文件,其中包含我的c#winform中的一些c代码,但我只有在完全执行exe后才能获得c代码的完整输出。我希望exe同步地(实时地逐行地)将其输出中继到我的winform 试试这个,它大致改编自: 请注意,从控制台接收输出的事件处理程序正在另一个线程上执行,因此您必须确保用于在窗体上显示输出的任何内容都发生在UI线程上。尝试此操作,它大致适用于: 请注意,从控制台接收输出的事件处理程序正在另一个线程上执行,因此您必须确保用于在窗体上显示输出的任何内容都发生在UI线程上。什么是

我正在执行一个exe文件,其中包含我的c#winform中的一些c代码,但我只有在完全执行exe后才能获得c代码的完整输出。我希望exe同步地(实时地逐行地)将其输出中继到我的winform


试试这个,它大致改编自:


请注意,从控制台接收输出的事件处理程序正在另一个线程上执行,因此您必须确保用于在窗体上显示输出的任何内容都发生在UI线程上。

尝试此操作,它大致适用于:


请注意,从控制台接收输出的事件处理程序正在另一个线程上执行,因此您必须确保用于在窗体上显示输出的任何内容都发生在UI线程上。

什么是
某些c代码
?除非执行进程将文本放在输出中,否则不会将文本写入输出。您应该检查
background.exe
的代码。并确保
background.exe
实际上是一个已编译的二进制可执行文件,而不仅仅是一个具有不同扩展名ID的C文件。您检查了这个和这个?检查了所有代码示例,他们只有在处理完成后才读取输出。什么是
某些C代码
?除非执行进程将文本放在输出中,否则不会将文本写入输出。您应该检查
background.exe
的代码。并确保
background.exe
实际上是一个已编译的二进制可执行文件,而不仅仅是一个具有不同扩展名的C文件。您检查了这个和这个?检查了所有代码示例,它们只在过程完成后读取输出。
BeginOutputReadLine
不是一个异步方法吗?@Sipo它可能是。这是两年前的事了,我什么都不记得了。我很可能会删除答案。
BeginOutputReadLine
不是异步方法吗?@Sipo可能是。这是两年前的事了,我什么都不记得了。我很可能会删除答案。
    var proc = new Process
      {
          StartInfo = new ProcessStartInfo
          {
              FileName = "background.exe",
              Arguments = command,
              UseShellExecute = false,
              RedirectStandardOutput = true,
              CreateNoWindow = true
          }
      };


      proc.Start();
      while (!proc.StandardOutput.EndOfStream)
      {
          ConsoleWindow.AppendText(proc.StandardOutput.ReadLine());
          ConsoleWindow.AppendText(Environment.NewLine);

      }
    private void button1_Click(object sender, EventArgs e)
    {
        var consoleProcess = new Process
        {
            StartInfo =
            {
                FileName =
                    @"background.exe",
                UseShellExecute = false,
                RedirectStandardOutput = true
            }
        };

        consoleProcess.OutputDataReceived += ConsoleOutputHandler;
        consoleProcess.StartInfo.RedirectStandardInput = true;
        consoleProcess.Start();
        consoleProcess.BeginOutputReadLine();
    }

    private void ConsoleOutputHandler(object sendingProcess,
        DataReceivedEventArgs outLine)
    {
        // This is the method in your form that's 
        // going to display the line of output from the console.
        WriteToOutput(outLine.Data);
    }