我想将Image.Source属性更新为相同的文件路径但已更新。我正在使用一种方法来设置Source属性。
方式:
void setImageSource(string file)
{
BitmapImage image = new BitmapImage();
image.BeginInit();
Uri imageSource = new Uri(file);
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = imageSource;
image.EndInit();
ssPreview.Source = image;
}
在第一组源中没有问题。但是当我第二次调用此方法时,它会在ssPreview.Source = image
行引发错误。错误显示cannot access file because it is being used by another process
。
我无法解决这个问题。怎么解决?
答案 0 :(得分:3)
当您尝试从中创建BitmapImage时,错误消息指示图像文件仍处于打开状态。这意味着您在更新后没有关闭它。
除此之外,从文件加载BitmapSource的更安全的方法是使用FileStream
而不是Uri,如下所示。这绝对避免了WPF可能完成的任何图像URI缓存。
private static BitmapSource LoadImage(string path)
{
var bitmap = new BitmapImage();
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
return bitmap;
}
或更短:
private static BitmapSource LoadImage(string path)
{
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
return BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}