我正在尝试在 C# 程序(例如 cmd)中创建一个子进程并使用进程 IO 流执行读/写。我正在使用 StandardOutput.Read() 方法来读取进程输出。
当我在 Read() 之前放置一个 Thread.Sleep() 方法时,它会提供完整的输出,但如果我删除它,它只会显示单行输出。
这是代码:
string sProcess = "cmd.exe";
ProcessStartInfo psiInfo = new ProcessStartInfo();
psiInfo.FileName = sProcess;
psiInfo.CreateNoWindow = true;
psiInfo.UseShellExecute = false;
psiInfo.RedirectStandardOutput = true;
psiInfo.RedirectStandardError = true;
psiInfo.RedirectStandardInput = true;
Process pChild = new Process();
pChild.StartInfo = psiInfo;
if (pChild.Start())
{
int ch;
do
{
Thread.Sleep(50);
ch = pChild.StandardOutput.Peek();
if (ch > 0)
Console.Write((char)pChild.StandardOutput.Read());
} while (ch > 0);
Console.WriteLine("exit");
pChild.StandardInput.WriteLine("exit");
}
启用睡眠的输出:
Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。版权所有。 D:\ProcessDemo_001\bin\Release>退出
禁用睡眠的输出:
Microsoft Windows [版本 6.1.7601] 退出
我想知道为什么会这样?