考慮這個例子的C#代碼(無關件離開了):異步使用System.Diagnostics.Process,我應該如何確保在確定退出之前收到最後一個輸出?
using System.Diagnostics.Process;
var process = new Process();
var startInfo = process.StartInfo;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
process.EnableRaisingEvents = true;
process.OutputDataReceived += OutputHandler;
process.ErrorDataReceived += ErrorHandler;
process.Exited += ExitHandler;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
現在,我要通知偵聽器的過程結束後,沒有更多的輸出(stdout /標準錯誤),以從中讀取。如何確保在我的ExitHandler
方法中,在確定進程已真正完成之前,所有剩餘的stdout/stderr都由OutputHandler
和ErrorHandler
處理?
所以這是一個已知的模式,用於確保stdout/stderr處理在'Exited'處理程序中完成? – aknuds1
我看到'WaitForExit()'文檔說:*這個方法指示Process組件等待無限的時間讓進程和事件處理程序退出。*這實際上聽起來像我需要的。在所有其他事件處理完成後,我認爲'Exited'處理程序中沒有任何保證。 – aknuds1
我將其標記爲解決方案,因爲從參考文檔看來它是正確的。我認爲負面超時是不必要的,但根據參考,它應該對應於'WaitForExit()'過載。 – aknuds1