C#实时重定向应用程序输出

C#实时重定向应用程序输出,c#,real-time,io-redirection,C#,Real Time,Io Redirection,我试图实现的是实时(同步)重定向。 我尝试了许多选项,这些选项在Stackoverflow中已经得到了回答。 但每个答案都只建议异步重定向。 “实时”一词的意思是,当从进程将“~~”打印到控制台时,主进程应用程序立即捕获该信息并将“~~”打印到其控制台 下面是当前代码。注意,我尝试了几种方法,并对其他方法进行了评论。我认为System.Diagnostics.Process只提供异步流。在c#中实现同步流有什么好的解决方案吗 异步方法有什么问题?您可以阻止并等待事件到达,使其同步。相关:@zmb

我试图实现的是实时(同步)重定向。 我尝试了许多选项,这些选项在Stackoverflow中已经得到了回答。 但每个答案都只建议异步重定向。 “实时”一词的意思是,当从进程将“~~”打印到控制台时,主进程应用程序立即捕获该信息并将“~~”打印到其控制台

下面是当前代码。注意,我尝试了几种方法,并对其他方法进行了评论。我认为System.Diagnostics.Process只提供异步流。在c#中实现同步流有什么好的解决方案吗


异步方法有什么问题?您可以阻止并等待事件到达,使其同步。相关:@zmbq最大的问题是我必须等待“从”退出。“从”退出时调用异步事件。从可能会刷新其输出。@zmbq yep flush是关键问题。当我立即将slave更改为flush时,此代码将实时捕获,非常感谢zmbq.)
var processStartInfo = new ProcessStartInfo
{
    FileName = "myprocess.exe",
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = true,
 };
var process = new Process();
process.StartInfo = processStartInfo;
process.OutputDataReceived += delegate (object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
};
process.Start();
process.BeginOutputReadLine();

/* Below is other approach, which do not use DataReceivedEventHandler
string line;
do
{
    line = process.StandardOutput.ReadLine();
    // non-thread approach is also tried.
    Thread thread = new Thread(delegate ()
    {
    Console.WriteLine(line);
    });
    thread.isBackGround = true;
    thread.Start();
} while (line != null);
*/