W języku C# Rozpoczynam aplikację innej firmy, która zajmuje 2 - 3 godziny. Potrzebuję danych wyjściowych procesu, aby pisać na konsoli w czasie rzeczywistym. Zrobiłem badania na BeginOutputReadLine()
i RedirectStandardOutput
ze strony Microsoftu, ale mój kod nadal nie działa.C# Pokaż wyjście procesu w czasie rzeczywistym
Obecnie mój kod wyświetla dane wyjściowe dopiero po zakończeniu procesu. Nie wiem, gdzie poszło nie tak.
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 To nie jest to samo pytanie, ale tak, całkiem podobne. – feralin
Jest to całkiem normalne, proces przełączy się na buforowane wyjście, gdy przekierujesz jego wyjście. Jeśli nie wypluje zbyt dużo tekstu, bufor nie zapełnia się wystarczająco, aby spowodować przepłukanie. Nic nie możesz z tym zrobić, jeśli nie możesz naprawić kodu programu. –