Есть стэк, который биндится к списку изображений.
Как мне асинхронно подгружать в него изображения (Большой объем), чтобы ui не останавливался? Пробовал в коллекцию через асинхронный метод добавлять, но поток все равно останавливается. Во view добавлял объекту IsAsync, тоже не помогает.
private async void GenerateTop()
{
Screenshots = new ObservableCollection
Ответ
Вы должны разделить модель и представление.
Функции загрузки модели должны бежать в неосновном потоке, и там пусть загружают что угодно как угодно медленно. Представление (в случае, если вы используете MVVM, это ваша VM) получает от модели любым способом извещение о том, что данные загрузка произошла и есть новые данные для показа, и (в главном потоке!) обновляет VM-список изображений.
Таким образом ваш UI не будет подвисать, ваш код будет будет асинхронным, а волосы — мягкими и шелковистыми.
Если подвисает загрузка картинки, попробуйте и правда использовать IsAsync в привязке. Единственная тонкость — у вас сейчас IsAsync грузит асинхронно строку, а конверсия в картинку выполняется в UI-потоке. Попробуйте указать конвертер:
class ImageSourceLoadingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object p, CultureInfo ci) =>
new BitmapImage(new Uri((string)value));
public object ConvertBack(object value, Type targetType, object p, CultureInfo ci) =>
throw new NotSupportedException();
}
в этом случае, кажется, конверсия будет производиться асинхронно.
Комментариев нет:
Отправить комментарий