У меня возникают проблемы с загрузкой моего изображения, блокируя поток пользовательского интерфейса, поэтому мой gridview не реагирует на мое приложение для хранения Windows.WinRT - Виртуализация пользовательского интерфейса Загрузка изображений async blocking UI Thread
Что я пытаюсь сделать для изображений в gridview иметь привязку к свойству изображения в моей модели просмотра. Значение свойства изображения устанавливается с помощью метода async. Когда приложение запускается, он загружает все объекты, но не фактические данные изображения. Данные изображения загружаются, когда виртуализация пользовательского интерфейса запускается и запрашивает данные изображения через свойство изображения, связанное с элементом управления изображением в xaml.
Все это делается в наблюдаемом собрании.
Вот код:
private ImageSource _image = null;
private String _imagePath = null;
public ImageSource Image
{
get
{
SetImageFromStorageFile().ContinueWith(OnAsyncFail, TaskContinuationOptions.OnlyOnFaulted);
return this._image;
}
}
private async Task SetImageFromStorageFile()
{
this.IsLoading = true;
if (this._image == null && this._imagePath != null)
{
this._image = await BitmapLoader.GetPreviewImageFromStorageFile(this.StorageFile); //getting the actual data here
this.OnPropertyChanged("Image");
}
this.IsLoading = false;
}
Это все работает нормально, за исключением того, что пользовательский интерфейс перестает отвечать на запросы при доступе к данным изображения.
Как вы можете видеть, я вызываю метод async из свойства, я просто повторно использую код, который я вызываю из других мест. При вызове из других мест я могу использовать ожидание, и пользовательский интерфейс реагирует. Проблема в том, что при использовании виртуализации пользовательских интерфейсов gridviews я не знаю, как запустить этот асинхронный метод без блокировки пользовательского интерфейса, поскольку свойства не могут запускаться async (насколько я знаю).
Поэтому я просто хочу, чтобы gridview запускал эту функцию (или метод) вместо синхронизации, но не знаю, как это сделать.
Пожалуйста, помогите :)
После того, как я разорвал волосы, я решил посмотреть, была ли проблема с сеткой. И если я удалил с помощью группировки и просто использовал простую сетку, он работал так, как я ожидал. Поэтому у меня нет ответа на мой вопрос, но обходной путь. Нехорошо. – madmarten