Асинхронно получать прогресс загрузки файла из другого потока (WPF)

Есть WPF приложение с кнопкой загрузки файла. При нажатии на эту кнопку обработчик кнопки вызывает асинхронно метод класса-сервиса, который некоторое время загружает этот файл во внешний ресурс.

Вопрос в следующем: Как мне получать прогресс о загрузке файла, если загрузка происходит в другом потоке?

Сам процесс загрузки файла можно условно представить циклом с Thread.Sleep(1000) между итерациями.


Ответы (1 шт):

Автор решения: Дмитрий

Предложенный вариант работы (см комментарий 2 выше) через Progress подошёл. У объекта этого класса можно подписаться на событие ProgressChanged и, соответсвенно, в теле метода-обработчика использовать получаемый прогресс.

Например:

IProgress<int> progressIndicator = new Progress<int>();

progressIndicator.ProgressChanged += (o, progress) => { button.Content = progress; };

или так:

IProgress<int> progressIndicator = new Progress<int>(progress => button.Content = progress);

ну и конечно же нужно реализовать метод где объект progressIndicator будет применяться и откуда он будет сообщать о прогрессе.

Вызвать можно так:

progressIndicator.Report(100);
→ Ссылка