c# - 使用进程的实时控制台输出重定向

标签 c# process console-redirect

我正在使用 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/

相关文章:

调用 Console.ReadLine() 的方法的 C# 单元测试

windows - 能否完全捕获 Windows 控制台应用程序的控制台输出(包括高级操作)?

c# - 我的 Azure 开发环境总是将我重定向到错误页面

c# - 嵌套动态控件,使用自定义事件处理程序

c# - 在 SQL 中实现 C# 迁移代码

c# - 您如何正确使用 UpdatePanel?

c - 为什么 for_each_process 不显示每个任务?

javascript - 如何并发运行mongo脚本

python脚本进程stat停留在Sl上并停止运行