У меня проблема с чтением вывода одного процесса асинхронно в C#. Я нашел некоторые другие подобные вопросы на этом сайте, но они мне действительно не помогают. Вот что я делаю:Как читать для завершения процесса вывода асинхронно в C#?
- сделать новый процесс
- Set startinfo -filename, аргументы, CreateNoWindow (истина), UseShellExecute (ложь), RedirectStandardOutput (истина)
- Добавить обработчик события OutputDataReceived;
- Начальный процесс, BeginOutputReadLine, а затем WaitForExit().
Он отлично работает, но выход из запущенного процесса пишет несколько процентов (%
), которые я хочу получить, но я не могу, так как мой код считывает построчно и проценты не отображаются.
Пример:
%0,%1...%100
Finished.
Мой выход:
%0
Finished.
Вот текущий код моей программы:
StringBuilder sBuilder = new StringBuilder();
static void proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
sBuilder.AppendLine(e.Data);
}
static void CommandExecutor()
{
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = /*path of the program*/,
Arguments = /*arguments*/,
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true
}
};
process.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
Вы поставить точку останова на методе appenline, чтобы увидеть, сколько раз он попал? В консольном приложении проценты переписывают друг друга или непрерывны? –
Проценты переписываются. Я поставлю точку останова, чтобы увидеть, что произойдет ... –
Он попал восемь раз ... –