我正在使用 VBOXMANAGE 来“导出” guest 计算机。 VBOXManage 是一个控制台应用程序,可以从主机控制 guest 计算机的行为。由于导出命令是一个很长的过程,它会像这样返回过程更新:
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%"只会在实际过程完成后显示。
有没有办法实时捕获控制台输出?
谢谢!
最佳答案
这对我有用:
process.StartInfo.CreateNoWindow = true;
process.StartInfo.ErrorDialog = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.ErrorDataReceived += (sendingProcess, errorLine) => error.AppendLine(errorLine.Data);
process.OutputDataReceived += (sendingProcess, dataLine) => SetMessage(dataLine.Data);
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
process.WaitForExit();
error.AppendLine()
和 SetMessage()
是我用的方法。
关于c# - 使用进程的实时控制台输出重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2332127/