在WPF中,我正在尝试将许多(数千个)图像加载到ListBox WrapPanel中。
我试图以类似Windows资源管理器窗口的方式加载这些图像。
到目前为止,我已经编写了代码,加载所有图像的名称、位置(作为标记)和一个占位符图像以加快加载时间。
那部分没问题。接下来我想做的是动态地(逐个)加载图像缩略图。我这样做是为了让用户在缩略图加载时可以与之交互并查看可用的图像数量。我尝试了几种不同的方法-后台工作器、调度程序和单独的线程。
我使用的加载图像的代码如下:
我在互联网上搜寻了很久,但实际上不确定应该采取什么方向来完成我需要的内容。
如果需要我澄清其他事项,请告诉我。先谢谢你了! :)
编辑:好吧,参考this article,使用第二个答案,我让项目逐个加载。它可以很好地加载所有项目的名称,但似乎在大约40个项目后停止加载图像。
如果有人能够解释为什么会停止加载缩略图,但继续加载项目名称,那将是一个很大的帮助!谢谢!
我试图以类似Windows资源管理器窗口的方式加载这些图像。
到目前为止,我已经编写了代码,加载所有图像的名称、位置(作为标记)和一个占位符图像以加快加载时间。
Dim ofd As New Microsoft.Win32.OpenFileDialog()
ofd.Multiselect = True
ofd.Filter = "JPEG|*.jpg"
If ofd.ShowDialog() Then
For Each f In ofd.FileNames
Items.Add(New With {.img = New BitmapImage(New Uri("pack://application:,,,/Resources/PlaceholderPhoto.png")), .nam = Path.GetFileNameWithoutExtension(f), .tag = f})
Next
'The name of my ObservableCollection is Items'
lstboxPhotos.ItemsSource = Items
End If
那部分没问题。接下来我想做的是动态地(逐个)加载图像缩略图。我这样做是为了让用户在缩略图加载时可以与之交互并查看可用的图像数量。我尝试了几种不同的方法-后台工作器、调度程序和单独的线程。
我使用的加载图像的代码如下:
'i came from me doing a for..next for each image in Items collection'
Dim bmp As New BitmapImage()
bmp.BeginInit()
bmp.DecodePixelWidth = 90
bmp.DecodePixelHeight = 60
bmp.CacheOption = BitmapCacheOption.OnLoad
bmp.UriSource = New Uri(Items.Item(i).tag, UriKind.Absolute)
bmp.EndInit()
Items.Item(i).img = bmp
我在互联网上搜寻了很久,但实际上不确定应该采取什么方向来完成我需要的内容。
如果需要我澄清其他事项,请告诉我。先谢谢你了! :)
编辑:好吧,参考this article,使用第二个答案,我让项目逐个加载。它可以很好地加载所有项目的名称,但似乎在大约40个项目后停止加载图像。
如果有人能够解释为什么会停止加载缩略图,但继续加载项目名称,那将是一个很大的帮助!谢谢!