Пытается использовать класс Process
и его async
функции. Не удалось понять, как прочитать весь вывод из Process
до выхода из программы. Пожалуйста, помогите !!
Вот мой код,
void RunProcess()
{
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = CmdName,
Arguments = CmdArgs,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
}
};
using(process)
{
process.OutputDataReceived += Process_OutputDataReceived;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit(); // Even waiting for exit here.
_logger.Debug("End of process");
}
} // void RunProcess()
void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
_logger.Debug($"\t{e.Data}");
}
У меня есть другой код, который выполняется еще как минимум 30-45 секунд после того, как RunProcess()
вызван и завершен метод, но я не вижу результатов моего процесса нигде в журналах.
Если я запускаю программу синхронно, я получаю все выходные данные. Но не вижу выхода при асинхронном запуске. Кто-нибудь знает, что я делаю не так, пожалуйста?
(Обновление вопроса, чтобы сделать его более понятным!)
Код, который я разместил выше, работает и является минимальным (лишенные проверки, классы и т. Д.). Я ищу предложения о том, как сделать так, чтобы моя программа остановилась, пока полный вывод не будет записан в лог-файлы. Кто-нибудь знает, есть ли способ сделать это с помощью комбинации WaitForExit
и вызова события, как в коде выше, пожалуйста? Кажется, что процесс завершается первым и завершает обработчик события, прежде чем он сможет напечатать строки журнала.
Большое спасибо заранее !!