如何从 url 绑定大量图像 wpf c#
本文关键字:图像 wpf 绑定 url | 更新日期: 2023-09-27 18:35:31
我有一个列表框的视图。尝试用来自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;
}
这使得网址如下所示:
string.Format(ClientConstans.API_URL_GET_SMALL_IMAGE, resp.Surl)
// https://mysite/image.png
我用FileDto填充列表并将其绑定到列表框。它快速创建列表,但是我必须等待很多图像。
如果我想立即显示图像,我应该如何用图像填充列表框?(它们真的是小图像,大约 4kb/图像)
我遇到的另一个问题是我无法断开连接。当我清除列表并尝试重新填充时,我做不到。它给我抛出了一个例外,因为 URI 绑定。
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;
}
}
}
}
我在图像控件的加载事件异步上加载图像。它非常快,只使用一点内存和处理器。