次の引用があるProcess.StandardOutputのドキュメントを読みました。
親プロセスが p.StandardOutput.ReadToEnd の前に p.WaitForExit を呼び出し、子プロセスがリダイレクトされたストリームを満たすのに十分なテキストを書き込むと、デッドロック状態が発生する可能性があります。
だから私は疑問に思っています。いくつかのシナリオで StandardError が満たされる可能性があることも恐れている場合、これを行う正しい方法は何ですか?
いっぱいになるのを避けるために、ループを使用して標準出力とエラーからの読み取りを交互に行う必要がありますか、それともこの単純なコードで十分ですか:
string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
いくつかの回答が投稿された後に編集されました
それで、これは正しいアプローチですか?
var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);
そして、プロセスが実際に終了した場合にのみ、stringbuilder コンテンツを使用します。
それは正しいアプローチですか?