【问题标题】:How to dispose bitmapsource如何处理位图源
【发布时间】:2013-08-31 09:40:59
【问题描述】:

我使用 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);

当我试图删除图像时,我收到一个异常消息“进程无法访问文件'文件路径/文件名',因为它正在被另一个进程使用。”。我想在删除图像之前处理位图源。当我在寻找解决方案时,我得到了类似的信息 “您不必 Dispose() BitmapSource。与框架中的其他一些“图像”类不同,它不包装任何本机资源。

只要让它超出范围,垃圾收集器就会释放它的内存。”在下面的链接Proper way to dispose a BitmapSource。我只想删除物理文件夹中存在的文件。有什么合适的方法删除物理路径。 提前致谢。

【问题讨论】:

  • 你可能想看看这里,这可能会有所帮助stackoverflow.com/questions/542217/… 特别是第三个答案
  • @ameer 该链接中的第三个答案是 image.CacheOption = BitmapCacheOption.OnLoad; ,不是吗?但是 BitmapSource 没有称为 CacheOption 左右的属性。我哪里错了,请提出建议。

标签: c# asp.net bitmap


【解决方案1】:

您可以按照建议的最佳答案here 执行操作,然后首先将文件复制到流中并从流中初始化位图源,例如

        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);

我已经试过了,它对我有用

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多