我遇到了一個類似的問題:我的應用程序本質上是一些cygwin應用程序的前端,有時應用程序會在通過OutputDataReceived事件接收到所有數據之前退出,並且會丟失數據。
我的修復/黑客是在過程對象消失之前在輸出AsyncStreamReader上調用WaitUtilEOF(必須使用反射,因爲WaitUtilEOF在.NET框架內部類上)。這會導致調用程序阻塞,直到通過OutputDataReceived刷新所有異步數據。我不知道這是否會直接解決您的問題,但它可能會幫助...
private static void WaitUntilAsyncStreamReachesEndOfFile(Process process, string field)
{
FieldInfo asyncStreamReaderField = typeof(Process).GetField(field, BindingFlags.NonPublic | BindingFlags.Instance);
object asyncStreamReader = asyncStreamReaderField.GetValue(process);
Type asyncStreamReaderType = asyncStreamReader.GetType();
MethodInfo waitUtilEofMethod = asyncStreamReaderType.GetMethod(@"WaitUtilEOF", BindingFlags.NonPublic | BindingFlags.Instance);
object[] empty = new object[] { };
waitUtilEofMethod.Invoke(asyncStreamReader, empty);
}
我打電話這樣說:
WaitUntilAsyncStreamReachesEndOfFile(process, "output");
祝你好運!