Асинхронно получать прогресс загрузки файла из другого потока (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);