2010-04-12 42 views
3

此代碼執行「handbrakecli」(命令行應用)和輸出放入一個字符串:重定向並解析在長時間運行的過程的實時標準輸出在vb.net

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

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

+0

這是非常多的,只是大塊閱讀它。 – NibblyPig 2010-04-12 15:15:59