【问题标题】:BitmapImage in WPF does lock fileWPF中的BitmapImage确实锁定文件
【发布时间】:2011-09-19 19:02:13
【问题描述】:

我用:

Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad

这不是Use OnLoad 并且文件仍然被锁定在硬盘上覆盖。知道怎么解锁吗?

问候

【问题讨论】:

标签: .net wpf vb.net bitmapimage locked


【解决方案1】:

如您链接到的问题所示,您需要像这样调用 BeginInit 和 EndInit,并设置 UriSource 属性:

Dim bmi As New BitmapImage()
bmi.BeginInit()
bmi.CacheOption = BitmapCacheOption.OnLoad
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute)
bmi.EndInit()

【讨论】:

  • 感谢您对我的关键字和 VB 而不是 C# 的快速回复!现在效果很好!
  • 有没有办法严格使用 XAML 来做到这一点。
【解决方案2】:

从文件中读取BitmapImage 并用MemoryStream 重写它:

MemoryStream ms = new MemoryStream();
BitmapImage bi = new BitmapImage();
byte[] bytArray = File.ReadAllBytes(@"test.jpg");
ms.Write(bytArray, 0, bytArray.Length);ms.Position = 0;
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
image.Source = bi;

【讨论】:

  • 感谢 Navid 的快速回复。据我所知,我认为这将起作用。我现在正在使用bmi.EndInit() 方法+OnLoad ,这在我的情况下要简单一些。
  • 现在,谁拥有 MemoryStream 对象实例并负责处置它?
  • 无论如何...如何解锁文件并删除它?
【解决方案3】:

我遇到了类似的问题,我用这个方法解决了: (这是答案的个性化here

    public static BitmapImage BitmapFromUri(Uri source)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = source;
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.EndInit();
        return bitmap;
    }

你可以这样打开图片:

BitmapImage bimg = BitmapFromUri(new Uri(some_URI));

加载后立即释放图像。

希望对你有帮助!

【讨论】:

    【解决方案4】:
    BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
    

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 2019-01-24
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多