Я создаю приложение для создания фотогалереи и хочу показать картинки по категориям.
В обычном режиме все работает хорошо, и изображения отображаются.
Но когда количество изображений увеличивается (300), программа зависает, и для ее отображения требуется много времени.
Поэтому я хочу использовать асинхронные и отображать изображения.
Я использовал следующий код, но ничего не происходит, и изображения не отображаются
int HandleFileAsync()
{
AllofItems.ForEachWithIndex((item, idx) =>
{
var cv = new CoverViewItem();
var contentImg = new Image();
contentImg.Stretch = Stretch.UniformToFill;
contentImg.Source = new BitmapImage(new Uri(item, UriKind.Absolute));
var img = new Image();
img.Source = new BitmapImage(new Uri(item, UriKind.Absolute));
//-< source >-
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri(item, UriKind.Absolute);
//< thumbnail >
src.DecodePixelWidth = 160;
src.CacheOption = BitmapCacheOption.OnLoad;
//</ thumbnail >
src.EndInit();
img.Source = src;
//-</ source >-
img.Stretch = Stretch.Uniform;
img.Height = 160;
cv.Header = img;
cv.Tag = item;
cv.Content = contentImg;
cv.Selected += Cv_Selected;
cv.Deselected += Cv_Deselected;
Dispatcher.Invoke(() =>
{
cover.Items.Add(cv);
});
});
return AllofItems.Count();
}
async void Example()
{
// This method runs asynchronously.
int t = await Task.Run(() => HandleFileAsync());
Console.WriteLine("Compute: " + t);
}
private void Listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
AllofItems = GetFileList(@"E:\DL\newArtWork\Art\" + listbox.SelectedItem).ToArray();
cover.Items.Clear();
Example();
}