У меня есть приложение с графическим интерфейсом, которое выполняет (в новом процессе) «консольные» приложения и анализирует вывод. Чтобы перенаправить вывод, я установил для pConsole.StartInfo.RedirectStandardOutput значение true. Я тоже подписываюсь на событие pConsole.Exited.
Проблема, которую я вижу, заключается в том, что мне нужно использовать Thread.Sleep () в обработчике события Exited для получения последних данных.
Мой обработчик события Exited выглядит так:
Thread.Sleep(100); // Wait for additional data (if any).
pConsole.OutputDataReceived -= new System.Diagnostics.DataReceivedEventHandler(this.localTerminal_DataAvailableEvent);
int exit = pConsole.ExitCode;
pConsole.Dispose();
pConsole = null;
Кажется, что событие Exited выполняется перед моим последним pConsole_DataAvailableEvent. Кто-нибудь знает, как / почему это происходит?
Я также использую мьютекс / блокировку, чтобы удостовериться, что событие Exited завершено, прежде чем я начну выполнять мое следующее консольное приложение.