System.Diagnosticsクラスを使用してC#アプリケーションからバッチファイルを実行し、途中で出力を使用してGUIを更新していますが、バッチファイルが特定の行数を超えるとすぐに、プロセスがハングします。正確な行数はさまざまですが、「ハローキティ」を316回印刷する簡単なバッチファイルで再現できました。
@echo off
echo Hello Kitty
echo Hello Kitty
等
316行目を削除すると、バッチファイルは正常に実行され、フォームアプリケーションは期待どおりに動作しますが、それ以上の行があると、プロセスが無期限に中断され、最初の300個のハローキティの1つも生成されません。
バッチファイルを実行するための私のコードは次のとおりです。
process = new System.Diagnostics.Process();
process.StartInfo.FileName = batchName;
process.StartInfo.Arguments = " < nul";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.Start();
これらは他の場所で宣言されています:
protected Process process;
protected StreamReader output;
私のメインフォームは次のようなことをします(少し簡略化されています):
string output;
while (!proc.Process.HasExited)
{
proc.Process.WaitForExit(200);
if (proc.Process.HasExited)
{
output = proc.Output.ReadToEnd();
rtbStatus.AppendText(output);
}
Application.DoEvents();
}
なぜこれが行われるのかわかりません。ネット上で見つけた例では、バッチファイルのサイズ制限について言及していません。お知らせ下さい。