此代码执行“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分钟才能完成,在此期间不会向用户报告任何内容。一旦完成,他们将看到应用程序的所有输出,其中包括进度详细信息。不太有用。
因此,我试图找到一个展示最佳方式的样本:
有没有人有任何推荐的代码段?
答案 0 :(得分: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