为什么在重定向标准输出时 TaskList.exe 永远不会结束?

Why Does TaskList.exe Never End When Redirecting Standard Output?

当我尝试使用进程 class 运行 tasklist.exe 并将 RedirectStandardOutput 设置为 true 时,进程永远不会结束。

using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        RunProcess("tasklist.exe");
    }

    private static void RunProcess(string command)
    {
        var process = new Process()
        {
            StartInfo =
            {
                FileName = command,
                RedirectStandardOutput = true,
                UseShellExecute = false
            }
        };

        process.Start();
        process.WaitForExit();
    }
}

如果我将 RedirectStandardOutput 设置为 false,进程就会结束!!!

为什么 tasklist.exe 进程永远不会结束?我正在使用 Windows 7 和 .net framework 4.5.2.

我发现当我强行关闭tasklist.exe时,每次标准输出都正好写入4096字节!我需要增加某种字符缓冲区的大小吗?

如果您使用 RedirectStandardOutput = true,请将此行添加到您的代码中:

process.Start();

// To avoid deadlocks, always read the output stream first and then wait.
string out = process.StandardOutput.ReadToEnd();

process.WaitForExit();