Есть метод, который асинхронно выполняет загрузку файлов, как задачу методом WebClient.DownloadFileTaskAsync
. У WebClient
есть встроенный индикатор выполнения - DownloadProgressChanged
. Если полю присваивать значение в методе, то ProgressBar
работает отлично. Но если делать передачу из другого класса (по MVVM паттерну), то передача не осуществляется. Код метода:
class Downloader
{
private int _progress;
public int Progress
{
get { return _progress; }
set { _progress = value; }
}
public async Task DownloadManyFiles(List<string> context, string pathFile)
{
WebClient wc = new WebClient();
wc.DownloadProgressChanged += (s, e) => Progress = e.ProgressPercentage;
foreach (var b in context)
{
string result = b.Substring(b.IndexOf("src/") + 14);
string fileName = pathFile + @"\" + result;
await wc.DownloadFileTaskAsync(b, fileName);
}
wc.Dispose();
}
}
И код в ViewModel:
private int _currentProgress;
public int CurrentProgress
{
get { return _currentProgress; }
set { SetProperty(ref _currentProgress, value); }
}
public ViewModel()
{
DownloadContent = new DelegateCommand<List<string>>(param =>
{
_downloader.DownloadManyFiles(_context.UrlsList, CurrentPath);
CurrentProgress = _downloader.Progress;
});
}
public DelegateCommand<List<string>> DownloadContent { get; }
И наконец, привязка ProgressBar:
<ProgressBar Minimum="0" Maximum="100" Value="{Binding CurrentProgress, Mode=OneWay}" Height="40" Width="340"/>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Проблема заключается в том, что моя программа не может справится со своей задачей, слишком много данных проходит один поток данных
Всем привет, если в браузере вставить ссылку на канал https://tme/durov, то при условии если установлен телеграм, то вы автоматически перейдете на этот...
В WPF/MVVM игре есть модель часов, которые изменяются каждую секундуА в другой модели описаны свойства игрока - голод и усталость
При выключении панели (метод Hide): включить анимацию, дождаться завершения анимации, а только потом выключать объект (методом SetActive(false))Event...