4

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();
}

なぜこれが行われるのかわかりません。ネット上で見つけた例では、バッチファイルのサイズ制限について言及していません。お知らせ下さい。

4

1 に答える 1

7

出力を継続的に読み取る必要があります。最後まで待つことはできません。

出力はバッファリングされるため、プロセスがハングする前に少量 (通常は約 4KB) を書き込むことができます。

別の方法は、出力をファイルに送信してから、ファイルを読み取ることです。

于 2012-07-20T11:35:05.730 に答える