如何从 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 绑定。

如何从 url 绑定大量图像 wpf c#

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;
            }
        }
    }
}

我在图像控件的加载事件异步上加载图像。它非常快,只使用一点内存和处理器。