我正在使用VBOXMANAGE来“导出”一台客户机。 VBOXManage是一个控制从主机上的客户机行为的控制台应用程序。由于导出命令是一个长时间运行的过程,因此它会返回类似以下的进度更新:
0%...10%...20%...30%...100%
我正在编写一个C#应用程序来使用Process调用VBOXManage。这是我的代码:
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();
这很好,但输出是按行读取的,这意味着进程更新“0%... 10%... 20%... 30%... 100%”仅会在实际进程完成后显示。
有没有一种方法可以实时捕获控制台输出?
谢谢!
With
语句会让那段代码更易读(也更方便复制)...With VBOXProc ... With .StartInfo ... End With ... End With
. - Basic