привет есть не большая проблема вот метод для загрузки с URL картинки
public async Task DownloadFile(string adress, Image target)
{
if (adress == string.Empty)
return;
using (var web = new WebClient())
{
await web.DownloadFileTaskAsync(new Uri(adress), "Data/" + adress.Substring(adress.LastIndexOf("/")));
var path = Directory.GetCurrentDirectory() + "/Data/" + adress.Substring(adress.LastIndexOf("/"));
target.Source = new BitmapImage(new Uri(path));
}
}
Сделал WebClient
локальным, потому что может быть несколько параллельныx загрузок и для каждой свой. Так вот вопрос: как отменить загрузку не конкретном webcliente?
Стандарт для отмены операций в TAP -- это использование CancellationToken
. При каждом вызове метода вам нужно передавать свой токен и тогда вы сможете управлять отменой по отдельности.
Однако поскольку WebClient
был создан еще до TAP, то поддержку TAP в него добавляли пост-фактум и частично. Одним из ограничений является то, что он не умеет работать с CancellationToken
. Но можно воспользоваться следующим трюком:
public async Task DownloadFile(string adress, Image target, CancellationToken token)
{
if (adress == string.Empty)
return;
// регистрируем вызов CancelAsync() как реакцию на отмену токена,
// using нужен для отмены регистрации после завершения скачивания
using (var web = new WebClient())
using (token.Register(web.CancelAsync))
{
await web.DownloadFileTaskAsync(new Uri(adress), "Data/" + adress.Substring(adress.LastIndexOf("/")));
}
// этот код уже не имеет отношения к WebClient, поэтому лучше вынести его из using
var path = Directory.GetCurrentDirectory() + "/Data/" + adress.Substring(adress.LastIndexOf("/"));
target.Source = new BitmapImage(new Uri(path));
}
...
var cts = new CancellationTokenSource();
await DownloadFile(..., ..., cts.Token);
// где-то в другом месте
cts.Cancel();
Как меняется крипторынок и к чему готовиться владельцам криптообменников
Есть метод для отсечки по времени выполнения асинхронной задачи, выглядит он вот так:
Во время работы в студии все хорошо работает, когда публикую сайт на сервер пишет вот такие ошибки :
Есть TreeView, к которому биндятся команды копирования/вставки/удаления узлов с горячими клавишами