如何处理BitmapSource

4
我正在使用BitmapSource类从我的临时文件夹中读取图像,然后使用BitmapMetadata类读取元数据。
BitmapSource img = BitmapFrame.Create(new Uri(filepath));
 BitmapMetadata meta = (BitmapMetadata)img.Metadata;
DateTime datetaken = DateTime.Parse(meta.DateTaken);
System.IO.File.Delete(filepath);

当我试图删除图片时,我遇到了一个异常,显示“由于另一个进程正在使用文件'filepath/filename',因此无法访问” 。我想在删除图片之前处理掉bitmapsource。在寻找解决方案时,我看到以下信息:“您不必Dispose() BitmapSource。与框架中的其他一些“image”类不同,它不包装任何本机资源。只需让它超出范围,垃圾收集器将释放其内存。”在以下链接中:Proper way to dispose a BitmapSource。我只想删除实际存在于物理文件夹中的文件。是否有适当的方式用于物理路径的删除? 提前致谢。

你可能想看一下这里,这可能会有所帮助 https://dev59.com/60bRa4cB1Zd3GeqP1YoR 特别是第三个答案。 - ameer
@ameer 那个链接中的第三个答案是 image.CacheOption = BitmapCacheOption.OnLoad;,对吗?但是BitmapSource没有叫做CacheOption的属性。如果我哪里错了,请指教。 - shivasai
1个回答

1
你可以按照顶部建议的方法这里,先将文件复制到流中,然后从该流初始化位图源。例如:
        MemoryStream memoryStream = new MemoryStream();

        byte[] fileBytes = File.ReadAllBytes(filepath);
        memoryStream.Write(fileBytes, 0, fileBytes.Length);
        memoryStream.Position = 0;

        BitmapSource img = BitmapFrame.Create(memoryStream);
        BitmapMetadata meta = (BitmapMetadata)img.Metadata;
        DateTime datetaken = DateTime.Parse(meta.DateTaken);
        System.IO.File.Delete(filepath);

我已经尝试过这个方法,它对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接