Process.OutputDataReceived не срабатывает - PullRequest
0 голосов
/ 05 января 2020

У меня есть простая функция в проекте WPF. У меня есть Progressbar, и я хочу, чтобы, когда внешняя программа запускает команду, Progressbar будет обновляться. Странно то, что он обновляется только после завершения внешней программы.

внешняя программа редактирует все изображения в указанной папке c, когда она завершает редактирование изображения, она пишет новую строку.

public string RunExternalExe(string filename, string arguments = null)
    {
        var process = new Process();

        process.StartInfo.FileName = filename;
        if (!string.IsNullOrEmpty(arguments))
        {
            process.StartInfo.Arguments = arguments;
        }

        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.StartInfo.UseShellExecute = false;

        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardOutput = true;

        var stdOutput = new StringBuilder();

        // Use AppendLine rather than Append since args.Data is one line of output, not including the newline character.
        process.OutputDataReceived += (sender, args) =>
        {
            bgwMain.ReportProgress(i+=2);
            //Console.WriteLine(args.Data);
            //stdOutput.AppendLine(args.Data);
        };

        try
        {
            process.Start();
            process.BeginOutputReadLine();

            process.WaitForExit();
        }
        catch (Exception e)
        {
            throw new Exception("OS error while executing " , e);
        }

        if (process.ExitCode == 0)
        {
            return stdOutput.ToString();
        }
        else
        {

            throw new Exception("finished with exit code = " + process.ExitCode);
        }
    }

Что-то не так с моим кодом? Должен ли я общаться с программистами внешней программы? и попросить их сделать что-нибудь с их кодом, который будет вызывать мое событие?

спасибо

...