Мое приложение WPF MVVM загружает изображение с заданного URL-адреса асинхронно, через Webclient.DownloadFileAsync(url, fileLocation)
.Этот процесс идет нормально и гладко, при загрузке изображения не происходит никаких зависаний.Но проблема возникает, когда я представляю файл изображения пользователю - приложение перестает отвечать на запросы.
После загрузки файла я назначаю файл изображения для BitmapImage:
public async void LoadFileToBitmapImage(string filePath)
{
_isDownloading = false;
await FileToBitmapImage(filePath);
}
public Task FileToBitmapImage(string filePath)
{
return Task.Run(() =>
{
var executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var imageLocation = Path.Combine(executableLocation, filePath);
var bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(imageLocation);
bi.EndInit();
bi.Freeze();
Image = bi;
});
}
Изображение.cs:
private BitmapImage _image;
public BitmapImage Image
{
get => _image;
set
{
_image = value;
NotifyOfPropertyChange("Image");
}
}
Привязка изображения XAML:
<Image Source="{Binding Image, IsAsync=True}" Margin="3"/>
Проблема возникает, когда изображение загружается и представляется пользователю.Чем больше изображение, тем больше времени требуется, чтобы представить его пользователю, и тем больше времени приложение не отвечает.
Я пытался нажать кнопку паузы в тот самый момент, когда приложение зависает, чтобы проверить потоки и получить следующая информация и, к сожалению, она не предоставляет мне никакой информации.
Любая помощь будет высоко ценится!
Редактировать
Стоит отметить, что приложение перестает отвечать на запросы после Событие PropertyChanged возникает, а не до.Может быть, это как-то связано с рендерингом изображения в пользовательский интерфейс?