Я использую VBOXMANAGE для "экспорта" гостевой машины. VBOXManage - это консольное приложение, которое может управлять поведением гостевой машины с хоста. Поскольку команда export является длинным процессом, она возвращает обновления процесса следующим образом:
0%... 10%... 20%... 30%... 100%
Я пишу приложение С#, которое будет вызывать VBOXManage с помощью Process. Здесь мой код:
Process VBOXProc = new Process();
VBOXProc.StartInfo.FileName = VBOXMANAGE;
VBOXProc.StartInfo.Arguments = Arguments;
VBOXProc.StartInfo.UseShellExecute = false;
VBOXProc.StartInfo.CreateNoWindow = true;
VBOXProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
VBOXProc.StartInfo.RedirectStandardError = true;
VBOXProc.StartInfo.RedirectStandardOutput = true;
VBOXProc.OutputDataReceived += new DataReceivedEventHandler(VBOXProc_OutputDataReceived);
VBOXProc.ErrorDataReceived += new DataReceivedEventHandler(VBOXProc_ErrorDataReceived);
VBOXProc.EnableRaisingEvents = true;
VBOXProc.Start();
VBOXProc.BeginOutputReadLine();
VBOXProc.BeginErrorReadLine();
VBOXProc.WaitForExit();
Это хорошо, за исключением того, что вывод читается на LINE. Это означает, что процесс обновляет "0%... 10%... 20%... 30%... 100%" будет отображаться только после того, как будет выполнен фактический процесс.
Есть ли способ захвата вывода консоли в реальном времени?
Спасибо!