【问题标题】:Redirect and parse in realtime stdout of an long running process in vb.net在 vb.net 中实时重定向和解析长时间运行的进程的标准输出
【发布时间】:2011-02-07 01:24:11
【问题描述】:

此代码执行“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. 必要时终止外部应用程序并检测何时发生这种情况(这样如果用户点击“取消”,我就可以采取适当的步骤)

谁有推荐的代码sn-ps?

【问题讨论】:

    标签: vb.net parsing process external-application


    【解决方案1】:

    StandardOutput 属性属于 StreamReader 类型,它具有 ReadToEnd 以外的方法。 这将是更多代码,但如果您使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多