私は、その進捗に関するデータをコマンドラインに書き込む第三者のDOSプロセスを持っています。 進捗状況に反応したい。通常、私は通常、この作品 プロセスの出力を取得することが可能
RedirectStandardOutput = true
とRedirectStandardError = true
でProcess
を使用して、
.OutputDataReceived +=xyzOutputDataReceived;
.ErrorDataReceived += xyzErrorDataReceived;
.Start();
.BeginOutputReadLine();
.BeginErrorReadLine();
でしょう。私はDataReceivedEventArgとして必要なものを手に入れました。
この場合、プロセスは書いた行と同じ行を更新しているように見えます(その可能性はありますか?)ので、15%、15%の変更が18%に書き込まれます。実行の終了時にのみ、データがStandardOutputにフラッシュされているように見えます。
また、データをテキストファイル(たとえばodb.exe >> output.txt
)にパイプしてみると、何も表示されません。
一時データを取得する方法はありますか?
質問は標準出力を取得することではなく、同期して非同期にうまく動作します。それは、私が変更できないプロセスから出力を得る方法であり、標準ストリームに出力されていないようです。
C#アプリケーションでは、 "Console.SetCursorPosition()'関数(https://msdn.microsoft.com/de-de/library)を使用して、同じ行にあるものを上書きすることもできます。 /system.console.setcursorposition%28v=vs.110%29.aspx)。私はなぜあなたのケースで 'OutputDataReceived'イベントを引き起こさないのか分かりません。 –
http://stackoverflow.com/questions/186822/capturing-console-output-from-a-net-application-c 、ほとんど同じ質問 – Thorarins
@Thorarins同じではありません。このQには、明らかに改行を印刷せず、標準出力をフラッシュしないアプリケーションがあります。そのため、 'OutputDataReceived'は起動されません。 –