2011-09-28 181 views
0

我遇到了一個有趣的問題。流程重用 - 異步BeginOutputReadLine問題

C#允許重複使用過程中的資源(根據MSDN) - 所以我把過程完成後實例的start()方法:

Process p = new Process(); 
// init 
p.Start(); 

一段時間後,:

p.Kill(); 
// not important 
p.Start(); 

當我有執行同步的線程讀取所有內容似乎沒問題 - 在第一次和第二次啓動()調用之後正在讀取輸出。


現在有趣的事情。當我使用異步讀取(一切正常初始化):

p.BeginOutputReadLine(); 

輸出僅在首次啓動()調用後才被讀取。第二個調用過程開始後,沒有任何輸出被重定向。

我也打過電話取消,開始一次:用同樣的結果

p.CancelOutputRead(); 
p.Kill(); 
// not important 
p.Start(); 
p.BeginOutputReadLine(); 

一些機的詳細資料:Win 7的旗艦版SP1 86(CPU也X86),測試了.NET 2.0/3.0,VS 2008

的問題是 - 它是一些框架錯誤或我的的Process.Start的誤解定義(「開始(或重新使用)此Process組件的StartInfo屬性指定的流程資源並將其與組件關聯。」)?任何幫助非常感謝。

我想解決方案是重新創建過程對象,但它可能會更慢。

回答

0

調用Kill需要在調用Start之前再次添加事件處理函數OutputDataReceived

+0

不,我重置StartInfo和處理字段,它仍然無法正常工作。我寫了一個小應用程序(約50行代碼),用於沒有任何外部可執行文件或代碼的測試。 – marchewek