我编写了一个 WPF 应用程序,它应该在大量图像(600+,190Kb 平均大小)之间交换(快速),但我发现了一些困难。
private int appendImages(Canvas c, int start, int end)
{
int tot = 0;
for (int i = start; i < end; i++)
{
BitmapImage bi = new BitmapImage();
bi.BeginInit();
//bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri(appFolder+@"/"+imgFolder+"/"+filename(i)+".jpg");
bi.EndInit();
Image img = new Image
{
Width = imgWidth,
Height = imgHeight,
Source = bi,
Name = name(i),
Visibility = i == startImg ? Visibility.Visible : Visibility.Hidden
};
c.Children.Add(img);
tot++;
}
}
显然初始化很好,但是如果我尝试像这样交换图像:
private void changeImageTo(int n)
{
Image img = findImage(n);
Image old = findImage(prevImg);
if (img != null)
{
img.Visibility = Visibility.Visible;
if (old != null && old != img)
old.Visibility = Visibility.Hidden;
prevImg = n;
}
}
..然后应用程序显示前 200/300 张图像(取决于我使用的来源),其他的只是空的/空白的(我可以看到下面的画布)。
我怀疑这是内存问题,但我不确定是什么原因造成的。
顺便说一句,如果我取消注释注释行 (BitmapCacheOption.OnLoad),有时我会在启动应用程序时收到 vshost 错误。
任何帮助将不胜感激,因为我找不到任何有用的浏览。提前致谢!