這個問題讓我感到困惑。C#過程:不能BeginOutputReadLine並且不能在第二次運行時取消輸出讀取
當我運行第二次一個過程中,我試圖取消先前讀線如下圖所示,當得到一個錯誤:
然而,這是事情變得時髦。如果我「實際」將執行點移動到「BeginErrorReadLine()」,它應該工作正確嗎?因爲沒有異步操作正在進行?
錯誤!
這...只是mindboggling,我不知道如何解決它; _;
這個問題讓我感到困惑。C#過程:不能BeginOutputReadLine並且不能在第二次運行時取消輸出讀取
當我運行第二次一個過程中,我試圖取消先前讀線如下圖所示,當得到一個錯誤:
然而,這是事情變得時髦。如果我「實際」將執行點移動到「BeginErrorReadLine()」,它應該工作正確嗎?因爲沒有異步操作正在進行?
錯誤!
這...只是mindboggling,我不知道如何解決它; _;
發生這種情況是因爲您試圖重新使用Process對象。這不是一個有效的事情,許多.NET類以這種方式行事。像線程,窗體,套接字等等。你只使用它們的一個對象,當你和他們在一起時,如果你想再次做同樣的事情,你應該Dispose()對象並創建一個新對象。
第一道工序停止運行後,_process
變成殭屍。 它的某些屬性仍然有用,例如可以使用ExitCode來發現它的結束方式,ExitTime可以找出發生的時間。但這就是它結束的地方,對象不再適用於其他任何事情,應該被處置。您在CancelErrorRead()上得到異常,因爲您已完成讀取錯誤輸出。 BeginErrorReadLine()異常,因爲您已經爲第一個進程進行了調用。
必須提前插入此行,可能與一些其他的代碼修修補補,我們不能看到:
_process = new Process();
利於它已退出事件處理清理。
謝謝。我試圖避免這種情況並重新使用資源,但似乎這是不可能的。 :( – TheThing