コンソール アプリケーションを実行する C# アプリケーション内でプロセスを開始しています。標準入力と標準出力をリダイレクトし、StandardOutput.ReadLine() を介して数行を読み取ることができます。ProcessStartInfo が正しく構成されていると確信しています。
コンソール アプリケーションは、開始されると、数行 (「マーカー」行で終わる) を出力し、入力を待ちます。入力を受け取った後、再び数行を出力します (再び「マーカー」行で終了します)。私の意図は、適切な入力文字列を送信することがわかっている「マーカー」行を受け取るまで、そこから行を読み取ることです。
私の問題は、何度か繰り返した後、プログラムがハングすることです。デバッガーを一時停止すると、StandardOutput.EndOfStream の呼び出し内でハングが発生する傾向があります。これは、次のテスト コードの場合です。
while (!mProcess.StandardOutput.EndOfStream) // Program hangs here.
{
Console.WriteLine(mProcess.StandardOutput.ReadLine());
}
「マーカー」行をテストしているときに、行を読み取った後に StandardOutput.EndOfStream にアクセスしようとすると、同じ種類のハングが発生します。
string line = "";
while (!isMarker(line))
{
line = mProcess.StandardOutput.ReadLine();
}
bool eos = mProcess.StandardOutput.EndOfStream; // Program hangs here.
このプロパティが非常にひどく機能する原因は何ですか?