地球人和火星人都知道,Process類既可以獲取正在運行的進(jìn)程,也可以啟動一個新的進(jìn)程。在79.77%應(yīng)用場合,我們只需要讓目標(biāo)進(jìn)程順利啟動就完事了,至于它執(zhí)行了啥,有沒有出錯,啥時候退出就不管了。
但是,在某些情況下,啟動新進(jìn)程后,還希望能向目標(biāo)進(jìn)程傳送數(shù)據(jù),或者實時讀取來自新進(jìn)程的信息。比如,啟動一個安裝程序,安裝程序會向標(biāo)準(zhǔn)流寫入安裝進(jìn)度,然后調(diào)用方可以從標(biāo)準(zhǔn)流中讀取進(jìn)度,以達(dá)到實時監(jiān)控安裝進(jìn)度的目的。
Process類公開三個標(biāo)準(zhǔn)流屬性:
StandardInput——輸入流。類型是Writer,為啥是writer呢,因為這個標(biāo)準(zhǔn)流是相對于被啟動的進(jìn)程而言的,流動方向是從調(diào)用方流向目標(biāo)進(jìn)程,所以是寫入數(shù)據(jù),即將內(nèi)容發(fā)送到目標(biāo)進(jìn)程。
StandardOutput——輸出流。即目標(biāo)進(jìn)程對外輸出的內(nèi)容,流動方向是從目標(biāo)進(jìn)程流向調(diào)用方,因此,對調(diào)用者來說,是讀取,故其類型為Reader。
StandardError——和輸入流差不多,只是它專用于輸出錯誤。錯誤信息是目標(biāo)進(jìn)程輸出的,所以,對調(diào)用者來說還是讀取者。
綜上所述,只要啟動新進(jìn)程后,從StandardOutput屬性在得到一個StreamReader對象,然后建立一個循環(huán),不斷地從流中讀取內(nèi)容,就能夠?qū)崟r獲得最新狀態(tài)了。
其實,還有更好辦的方法,Process類有個BeginOutputReadLine方法,調(diào)用后,會自動異步讀取數(shù)據(jù),一旦收到目標(biāo)進(jìn)程傳回的數(shù)據(jù),就會引