我有一個運行外部命令行實用程序並讀取標準輸出(PNG圖像)的程序。最初在測試期間,我讓命令行程序將圖像寫入臨時文件,然後將該文件加載到程序中。我有一個Process.Exited的處理程序,如果退出代碼爲非零,則會引發異常。我在加載臨時映像之前調用WaitForExit以確保該過程已完成。如果發生異常,則在讀取臨時映像文件的代碼中處理。現在,我調用Process.Start後直接創建圖像文件,如果沒有錯誤,它可以正常工作。如果外部程序異常退出,退出處理程序拋出的異常不再被我的代碼捕獲。如果我在讀取標準輸出之前調用WaitForExit,則程序掛起。有沒有辦法在不調用WaitForExit的情況下捕獲退出處理程序拋出的異常?從Process.Exited處理程序中拋出異常
0
A
回答
0
聽起來像你的命令行實用程序沒有正確退出。你是否通過顯示流程窗口來查看它是否做了不正確的事情?
我的安全賭注是不讀標準輸出會導致程序不能退出(它等待能夠清除它的輸出),因此您必須先讀取標準輸出,然後等待實用程序停止。
0
Process.Exited處理程序在與啓動進程的函數分開的上下文中執行。你可以修復這兩種方法。
- 開始進程後寫入循環。 (使用進程的句柄,在一個循環內調用WaitOne(100),如果你得到一個異常,那麼句柄就不存在了,你應該像進程已經完成一樣來操作,如果你沒有得到一個異常,那麼結果爲true該過程已關閉。)
- 在啓動過程之前創建一個Manual Reset事件,該ResetRevent事件是Reset()。啓動該進程後,請在該事件中調用WaitOne()。在Process.Exited處理程序中,設置()該事件,然後主要方法將繼續。
相關問題
- 1. 從信號處理程序中拋出異常
- 2. 錯誤處理程序中拋出的PHP異常不會被異常處理程序捕獲
- 3. 異常處理:拋出,拋出和拋出
- 4. 在全局異常處理程序中處理線程異常?
- 5. 註釋處理程序拋出未捕獲的異常
- 6. 使用自定義異常處理程序拋出FaultException EL WCF
- 7. 未處理的異常是由程序拋出
- 8. Google App Engine頻道呈現處理程序拋出異常
- 9. 爲類內部拋出的所有異常設置異常處理程序?
- 10. 處理IntList.remove()拋出的ArrayIndexOutOfBounds:10異常
- 11. 嘗試拋出異常處理
- 12. Wcf異常處理拋出錯誤
- 13. 處理由QPluginLoader :: load()拋出的異常:
- 14. @ControllerAdvice不處理拋出的異常
- 15. 處理(畢加索)拋出的異常
- 16. 處理onSubmitAction後拋出異常
- 17. 處理異常Java程序出口
- 18. php:在異常處理程序中處理異常?
- 19. 從拋出異常
- 20. abcpdf 8 .net在w3wp進程中拋出未處理的異常
- 21. 從ServletContextListener中拋出異常
- 22. 從JSP中拋出異常
- 23. 正確處理線程中或通過WPF調度程序拋出的異常
- 24. 異常處理程序
- 25. Netty異常處理 - Handler拋出異常,那麼是什麼?
- 26. 處理異常時拋出的額外的未捕獲異常
- 27. 重寫方法不會拋出異常時的異常處理
- 28. 多個異常拋出函數的異常處理實踐
- 29. 捕獲異常異步Web服務完成的事件處理程序拋出
- 30. 在異步補充解僱警報處理程序拋出異常
我知道它意外退出(Process.Exited的處理程序看到一個非零退出代碼並引發異常。)問題是我無法捕獲處理程序拋出的異常。 – pschorf 2009-05-29 15:49:30
@pschorf,啊 - 我明白。你可不只是將Process.Exited處理程序中的異常存儲到變量中並使用它 - 例如在等待進程退出後拋出它? – Thies 2009-05-29 15:53:39