2013-03-28 29 views
1

嗨同胞程序員,Process.Exited有時僅被調用有時

我正在撓撓我的頭在這一個。我正在使用以下方法來啓動一個進程。第一個是wkhtmltoimage.exe,然後是wkhtmltopdf.exe。一切正常,除了Process_Exited並不總是被調用。在我的節目,在那裏我按下相應的按鈕,多次跑單,我把所有可能的變化:

  • 只有wkhtmltoimage引發事件
  • 僅wkhtmltopdf引發事件
  • 都沒有
  • 該事件根本沒有提出。

通過任務管理器和調試器,我可以驗證 進程總是正確結束。
沒有什麼是可重複的,每次運行都不一樣。這是我第一次嘗試使用流程,也許我做錯了什麼。幸運的是,解決這個問題對我的應用程序並不重要。

protected Process StartProcess(string FileName, string Arguments) 
{ 
    ProcessStartInfo MyStartInfo = new ProcessStartInfo(FileName, Arguments) 
    { 
     UseShellExecute = false, 
     CreateNoWindow = true, 
     RedirectStandardOutput = true, 
     RedirectStandardInput = true 
    }; 

    Process Proc = new Process { StartInfo = MyStartInfo }; 
    Proc.EnableRaisingEvents = true; 
    Proc.Exited += (sender, name) => Process_Exited(Proc, Proc.ProcessName); 
    Proc.Start(); 

    return Proc; 
} 


protected void Process_Exited(object sender, string ProcessName) 
{ 
    Debug.WriteLine("Process_Exited: " + ProcessName); 
} 
+0

做嘗試: http://stackoverflow.com/questions/9484452/process-exited-is-never-called-even-though-enableraisingevents-is-set-to-true?lq=1 HTTP ://stackoverflow.com/questions/1768877/process-exited-event-is-not-be-called?rq = 1 – Nahum 2013-03-28 09:49:57

+0

很好的發現。我的代碼是完全讀取標準輸出。當它沒有時(我可以強制這個),我的程序就掛在標準輸出被讀取的行中。當然,我的過程不會退出,也不會觸發事件。如果我的程序確實會掛起,我會在調試器中注意到這一點,如果不重新啓動程序,我將無法重複該測試。 – Leif 2013-03-28 10:29:32

回答

0

您確定您的程序在進程退出時仍在運行。

我懷疑你的程序正在結束,在Process_Exited被調用之前。

+1

是的,我通過調試器通過它並監視任務管理器。我的程序仍在運行,並能夠捕捉事件。但謝謝你指出這一點。 – Leif 2013-03-28 10:25:52

相關問題