Как дождаться загрузки BitmapImage?

229
05 марта 2017, 05:43

Есть BitmapImage и у него есть проблема. Его нельзя просто создать. Можно только начать его инициализацию, после чего он сгенерирует события, типа DownloadCompleted или DownloadFailed. А мне необходимо сделать так, чтобы метод, в котором он инициализируется не возвращал ничего, пока инициализация не прошла. Но как? Не ставить же цикл while.

Answer 1

Например, так:

var bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = ...;
bi.EndInit();
// если передаёте в другой поток, ещё нужно
bi.Freeze();

Поскольку загрузка может быть медленной, я бы рекомендовал вынести в фоновый поток через Task.Run:

BitmapImage image = await Task.Run(() =>
    {
        var bi = new BitmapImage();
        // ...
        return bi;
    });
READ ALSO
Установка ItemsSource для ContexMenu

Установка ItemsSource для ContexMenu

Нужно задавать меню коллекцией объектов

294
c# Форматирование числа (ИНН) в строку

c# Форматирование числа (ИНН) в строку

Есть числовое(decimal) поле ИНН (10, 12 символов)Первые 2-а числа в ИНН - код региона

316