在vb.net中实时重定向和解析长时间运行进程的标准输出

3
这段代码执行“handbrakecli”(一个命令行应用程序),并将输出放入一个字符串中:
Dim p As Process = New Process    
p.StartInfo.FileName = "handbrakecli"
p.StartInfo.Arguments = "-i [source] -o [destination]"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start

Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit 

问题在于这可能需要长达20分钟的时间才能完成,期间没有任何反馈给用户。一旦完成,他们将看到应用程序的所有输出,包括进度细节。并不是非常有用。
因此,我正在尝试找到一个示例,展示以下最佳方法:
1. 启动一个外部应用程序(隐藏) 2. 定期监视其输出,因为它显示有关其进度的信息(以便我可以提取并向用户呈现漂亮的百分比条) 3. 确定外部应用程序何时完成(以便我不能继续执行自己的应用程序) 4. 必要时杀死外部应用程序,并检测是否发生了这种情况(以便如果用户点击“取消”,我会采取适当的步骤)
有人有推荐的代码片段吗?
1个回答

1

StandardOutput属性的类型为StreamReader,它具有除ReadToEnd之外的其他方法。 如果您使用Read方法,可能需要编写更多代码,但您可以执行其他操作,例如提供用户取消或报告某些进度的机会。

链接到带有代码示例的Read方法:

http://msdn.microsoft.com/en-us/library/ath1fht8(v=VS.90).aspx

编辑:

Process类还有一个BeginOutputReadLine方法,它是一个带回调函数的异步方法调用。

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline(v=VS.90).aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接