Я добавляю большой список изображений в элемент управления CoverView (созданный на основе списка). У меня проблема, когда информация слишком высокая.Добавленные изображения не будут отображаться одновременно. И мне нужно подождать, пока поиск и добавление завершатся. Я знаю, что для загрузки изображений потребовалось время.Я также пытался ускорить загрузку за счет уменьшения пикселей Но приложение зависает
Как я могу отображать изображения мгновенно, не вешая программу?
это моя модель представления
public class ImageData
{
public string Name { get; set; }
public ImageSource ImageSource { get; set; }
}
public async Task LoadFolder(CancellationToken ct)
{
foreach (var path in Directory.EnumerateFiles(DataPath, "*.jpg"))
{
if (!ct.IsCancellationRequested)
{
Images.Add(new ImageData
{
Name = path,
ImageSource = await LoadImage(path)
});
}
}
}
public Task<BitmapImage> LoadImage(string path)
{
return Task.Run(() =>
{
var bitmap = new BitmapImage();
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
bitmap.BeginInit();
bitmap.DecodePixelHeight = 100;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
}
return bitmap;
});
}
и я называю это так
await ((ViewModel)DataContext).LoadFolder(ts.Token);
также я пытался IsAsync стало немного лучше, но программапродолжает висеть и поздно встает
<CoverView ItemsSource="{Binding Images, IsAsync=True}"/>