Я использую VBOXMANAGE для «экспорта» гостевой машины. VBOXManage - это консольное приложение, которое может управлять поведением гостевой машины с хоста. Поскольку команда экспорта представляет собой длительный процесс, он возвращает обновление процесса следующим образом:Перенаправление выходных данных в режиме реального времени с использованием процесса
0% ... 10% ... 20% ... 30% ... 100%
Я пишу C#, которое будет вызывать 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%» будет отображаться только после того, как будет выполнен фактический процесс.
Есть ли способ захвата вывода консоли в реальном времени?
Спасибо!
Обратите внимание на название функции: BeginOutput * ReadLine * –
Да, благодарю вас за это замечательное понимание. ;) – Ian
Пара 'С'''''''''''''''''''''''''''''''''''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Basic