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

时间:2016-02-21 12:54:32

标签: c# wpf image listbox

我有一个视图,我有一个列表框。尝试用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绑定。

1 个答案:

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

    }

}

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