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