在将过程输出写入CMD时读取过程输出(未刷新?)

时间:2019-07-09 18:24:24

标签: c# .net winforms process stdout

有没有一种方法可以像通过shell启动进程一样获得进程输出?基本上,我需要启动一些外部流程(A&B)。当我通过cmd或UseShellExecute = true启动它们时,输出将连续打印。 进程A逐行打印其进度。进程B显示并更新基于文本的进度栏。

对于进程A,如果通过外壳启动进程,则在正常打印的每条输出行之后均不会触发OutputDataReceived。它大约每20行触发一次(触发20次,所以我有全部输出,但我无法实时捕获输出)。我想它在stdOut刷新后会触发,但是如何用cmd来打印部分输出,我该怎么做呢?

对于流程B,仅在流程完成后才触发OutputDataReceived。

我的代码:

public static bool ExecuteProcess(string Path, string CommandLine, Action<string> OutputLineDelegate)
{
    using (Process ChildProcess = new Process())
    {
        ChildProcess.StartInfo.FileName = Path;
        ChildProcess.StartInfo.Arguments = CommandLine;
        ChildProcess.StartInfo.UseShellExecute = false;
        ChildProcess.StartInfo.CreateNoWindow = true;
        ChildProcess.StartInfo.RedirectStandardOutput = true;

        ChildProcess.OutputDataReceived += delegate (object sender, DataReceivedEventArgs e)
        {
            OutputLineDelegate(e.Data);
        };

        ChildProcess.Start();

        ChildProcess.WaitForExit();
        var ExitCode = ChildProcess.ExitCode;
        OutputLineDelegate(string.Format("Exit code {0}", ExitCode));
        return ExitCode == 0 ? true : false;
    }
}

我尝试按char读取stdOut char,但是StreamReader.Read()和StreamReader.Peek()都等到输出中有任何内容为止。

0 个答案:

没有答案