In C# Sto avviando un'applicazione di terze parti che richiede 2-3 ore per essere completata. Ho bisogno dell'output del processo per scrivere sulla console in tempo reale. Ho effettuato ricerche su BeginOutputReadLine()
e RedirectStandardOutput
dal sito Web di Microsoft, ma il mio codice non funziona ancora.C# Mostra l'output del processo in tempo reale
Attualmente il mio codice mostra solo l'output al termine del processo. Non so dove sia andato storto.
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 Non esattamente la stessa domanda, ma sì, molto simile. – feralin
Questo è abbastanza normale, il processo passerà all'output bufferizzato quando si reindirizza l'output. Se non sputa molto un testo, quel buffer non si riempie abbastanza da causare il flush. Nulla che puoi fare se non riesci a correggere il codice del programma. –