【发布时间】:2020-02-19 15:19:29
【问题描述】:
我正在使用 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();
这很好,除了输出是按 LINE 读取的。这意味着进程更新“ 0%...10%...20%...30%...100%”只会在实际过程完成后显示。
有没有办法实时捕获控制台输出?
谢谢!
【问题讨论】:
-
注意函数名:BeginOutput ReadLine
-
是的,感谢 nobugz 的精彩见解。 ;)
-
几个
With语句将使代码更容易在眼睛(和剪贴板)上显示...With VBOXProc ... With .StartInfo ... End With ... End With。
标签: c# process console-redirect