C#では、完了までに2〜3時間かかるサードパーティアプリケーションを開始しています。リアルタイムでコンソールに書き込むためにプロセスの出力が必要です。私はマイクロソフトのウェブサイトからBeginOutputReadLine()
とRedirectStandardOutput
の研究を行ったが、私のコードはまだ動作していない。C#プロセスの出力をリアルタイムで表示します。
現在のところ、私のコードはプロセスが終了したときの出力のみを表示しています。私はどこが間違っているのか分からない。
static void Main(string[] args)
{
Process process;
process = new Process();
process.StartInfo.FileName = "C:\\ffmbc\\ffmbc.exe";
process.StartInfo.Arguments = "-i \\\\dssp-isi-t\\TMD\\B002C010_130520_R2R7.2398v5.mxf -an -vcodec libx264 -level 4.1 -preset veryslow -tune film -x264opts bluray-compat=1:weightp=0:bframes=3:nal-hrd=vbr:vbv-maxrate=40000:vbv-bufsize=30000:keyint=24:b-pyramid=strict:slices=4:aud=1:colorprim=bt709:transfer=bt709:colormatrix=bt709:sar=1/1:ref=4 -b 30M -bt 30M -threads 0 -pass 1 -y \\\\dss-isi-t\\MTPO_Transfer\\dbay\\B002C010_130520_R2R7.2398v5.mxf.h264";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
process.StartInfo.RedirectStandardInput = true;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
process.Close();
}
private static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
string line;
line = (outLine.Data.ToString());
Console.WriteLine(line);
}
@Xeano全く同じ質問ではありませんが、はい、かなり似ています。 – feralin
これはかなり正常です。出力をリダイレクトすると、プロセスはバッファリングされた出力に切り替わります。それがたくさんのテキストを吐き出さないならば、そのバッファはそれをフラッシュさせるのに十分ではありません。プログラムのコードを修正できない場合は、何もできません。 –