Пользовательский интерфейс зависает в данный момент Управление изображениями загружает BitmapImage - PullRequest
0 голосов
/ 13 сентября 2018

Мое приложение 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 возникает, а не до.Может быть, это как-то связано с рендерингом изображения в пользовательский интерфейс?

1 Ответ

0 голосов
/ 13 сентября 2018

Во-первых, если вы сохраняете изображение, изменяете привязку напрямую на строку / uri, без BitmapImage, без nned для его создания, Wpf обрабатывает это для вас public BitmapImage Image ===> public Uri Image

и удалите FileToBitmapImage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...