地球人和火星人都知道,Process類既可以獲取正在運(yùn)行的進(jìn)程,也可以啟動(dòng)一個(gè)新的進(jìn)程。在79.77%應(yīng)用場合,我們只需要讓目標(biāo)進(jìn)程順利啟動(dòng)就完事了,至于它執(zhí)行了啥,有沒有出錯(cuò),啥時(shí)候退出就不管了。

但是,在某些情況下,啟動(dòng)新進(jìn)程后,還希望能向目標(biāo)進(jìn)程傳送數(shù)據(jù),或者實(shí)時(shí)讀取來自新進(jìn)程的信息。比如,啟動(dòng)一個(gè)安裝程序,安裝程序會(huì)向標(biāo)準(zhǔn)流寫入安裝進(jìn)度,然后調(diào)用方可以從標(biāo)準(zhǔn)流中讀取進(jìn)度,以達(dá)到實(shí)時(shí)監(jiān)控安裝進(jìn)度的目的。

Process類公開三個(gè)標(biāo)準(zhǔn)流屬性:

StandardInput——輸入流。類型是Writer,為啥是writer呢,因?yàn)檫@個(gè)標(biāo)準(zhǔn)流是相對于被啟動(dòng)的進(jìn)程而言的,流動(dòng)方向是從調(diào)用方流向目標(biāo)進(jìn)程,所以是寫入數(shù)據(jù),即將內(nèi)容發(fā)送到目標(biāo)進(jìn)程。

StandardOutput——輸出流。即目標(biāo)進(jìn)程對外輸出的內(nèi)容,流動(dòng)方向是從目標(biāo)進(jìn)程流向調(diào)用方,因此,對調(diào)用者來說,是讀取,故其類型為Reader。

StandardError——和輸入流差不多,只是它專用于輸出錯(cuò)誤。錯(cuò)誤信息是目標(biāo)進(jìn)程輸出的,所以,對調(diào)用者來說還是讀取者。

綜上所述,只要啟動(dòng)新進(jìn)程后,從StandardOutput屬性在得到一個(gè)StreamReader對象,然后建立一個(gè)循環(huán),不斷地從流中讀取內(nèi)容,就能夠?qū)崟r(shí)獲得最新狀態(tài)了。

 

其實(shí),還有更好辦的方法,Process類有個(gè)BeginOutputReadLine方法,調(diào)用后,會(huì)自動(dòng)異步讀取數(shù)據(jù),一旦收到目標(biāo)進(jìn)程傳回的數(shù)據(jù),就會(huì)引

網(wǎng)友評論