C# プログラム (cmd など) でサブプロセスを作成し、プロセス IO ストリームで読み取り/書き込みを実行しようとしています。プロセス出力を読み取るために StandardOutput.Read() メソッドを使用しています。
Read() の前に Thread.Sleep() メソッドを配置すると、完全な出力が得られますが、削除すると、1 行の出力しか表示されません。
コードは次のとおりです。
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] Copyright (c) 2009 Microsoft Corporation. 全著作権所有。 D:\ProcessDemo_001\bin\Release>終了
スリープを無効にした出力:
Microsoft Windows [バージョン 6.1.7601] 終了
なぜこれが起こるのか知りたいですか?