У меня есть простая функция в проекте 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);
}
}
Что-то не так с моим кодом? Должен ли я общаться с программистами внешней программы? и попросить их сделать что-нибудь с их кодом, который будет вызывать мое событие?
спасибо