내 응용 프로그램이 Cygwin 응용 프로그램의 프론트 엔드이며, 응용 프로그램이 OutputDataReceived 이벤트를 통해 모든 데이터를 수신하기 전에 종료되기도하고 데이터가 손실되는 경우가 있습니다.
수정/해킹은 프로세스 개체가 사라지기 전에 출력 AsyncStreamReader에서 WaitUtilEOF를 호출하는 것입니다 (WaitUtilEOF는 .NET Framework 내부 클래스에 있기 때문에 리플렉션을 사용해야 함). 이렇게하면 모든 비동기 데이터가 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");
행운을 빕니다!