我有一个视图,我有一个列表框。尝试用url-s填充大约5000张图片。我有图像列表,但是当我尝试绑定它时,我必须等待很长时间才能看到图像。它显示图像非常慢。
public static FileDto MapToFileDto(this FileUploadedResponzeJsonDto resp)
{
var dto = new FileDto();
dto.Delete_url = resp.Delete_url;
dto.File_ID = resp.File_ID;
dto.FileName = resp.Name;
dto.FileSizeInBytes = resp.FileSizeInBytes;
dto.Info_url = resp.Info_url;
dto.Url = resp.Url;
dto.Visits = resp.Visits;
if(!string.IsNullOrEmpty(resp.Surl) && resp.Name.HasImageExtension())
dto.DisplayImage = new System.Windows.Media.Imaging.BitmapImage(new Uri(string.Format(ClientConstans.API_URL_GET_SMALL_IMAGE, resp.Surl)));
return dto;
}
这使得url-s像这样:
string.Format(ClientConstans.API_URL_GET_SMALL_IMAGE, resp.Surl)
// https://mysite/image.png
我用FileDto填充列表并将其绑定到列表框。它快速创建列表,但是我必须等待很多图像。
如果我想立即显示图像,我应该如何用图像填充列表框? (它们是非常小的图像,大约4kb /图像)
我遇到的另一个问题是我无法断开连接。当我清除列表并尝试重新填充时我无法做到。它只是一个例外,因为URI绑定。
答案 0 :(得分:0)
private async void LoadImageAsync(object sender, System.Windows.RoutedEventArgs e)
{
await Task.Delay(100);
var senderItem = sender as Image;
if (senderItem != null)
{
var dataContext = senderItem.DataContext as FileDto;
if (dataContext != null)
{
if (!string.IsNullOrEmpty(dataContext.ImageUrl))
{
var fullFilePath = dataContext.ImageUrl;
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new Uri(fullFilePath, UriKind.Absolute);
bitmap.EndInit();
senderItem.Source = bitmap;
}
}
}
}
我在图像控件的已加载事件异步上加载图像。它非常快,只使用一点内存和处理器。