【发布时间】:2016-08-05 19:14:30
【问题描述】:
我正在尝试在我的 WPF 应用程序中加载大约 20 张图像。只有第一个图像完全加载。其他图像正在部分加载。当我使用断点进行调试时,我尝试在 2 秒后加载每个图像并且效果很好。
代码
图片会像这样加载,
foreach (string path in ImagesCollection)
{
DisplayImage = LoadImage(path);
}
加载图片方法,
MemoryStream mem;
if (!string.IsNullOrEmpty(path) && (File.Exists(path)))
{
FileInfo ImageFile = new FileInfo(path);
ImageFile.Refresh();
if (mem != null)
{
mem.Dispose();
}
using (var stream = ImageFile.OpenRead())
{
mem = new MemoryStream();
stream.CopyTo(mem);
}
mem.Position = 0;
ImageFrame = BitmapFrame.Create(mem);
}
截图:
我相信Dispose 或新实例会使图像无法加载。请帮忙。
【问题讨论】:
-
有什么理由不使用
BitmapFrame.Create(new Uri(path))而不进行所有流复制? -
@Clemens 不,图像在多个位置加载,MS paint 中还有一个编辑和保存功能。使用
new Uri(path)抛出Access violation error?不确定。 -
@HenkHolterman 你能改一下吗?
-
BitmapFrame.Create(stream) 异步加载,并且由于在加载完成之前超出范围,内存流将被销毁。一种方法是使用 OnLoad 缓存选项。 (而不是默认的 OnDemand)。使用 BitmapFrame.Create(mem, BitmapCreateOptions.None, BitmapCacheOptions.OnLoad)
-
@oreubens 当我尝试加载大小 >5Mb 的图像文件时,这会频繁地创建我
Out of memory exception。