Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF中的BitmapImage不锁定文件_.net_Wpf_Vb.net_Bitmapimage_Locked - Fatal编程技术网

.net WPF中的BitmapImage不锁定文件

.net WPF中的BitmapImage不锁定文件,.net,wpf,vb.net,bitmapimage,locked,.net,Wpf,Vb.net,Bitmapimage,Locked,我使用: 这是不可能的 并且文件仍被锁定以在硬盘上覆盖。知道如何解锁吗 关于如您链接到的问题所示,您需要调用BeginInit和EndInit,就像这样,并设置URI源属性: Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute)) bmi.CacheOption = BitmapCacheOption.OnLoad 从文件中读取位图图像,然后用内存流重写它: Dim bmi As New BitmapImag

我使用:

这是不可能的 并且文件仍被锁定以在硬盘上覆盖。知道如何解锁吗


关于

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

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

从文件中读取
位图图像
,然后用
内存流
重写它:

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

我有一个类似的问题,我用这个方法解决了: (这是答案的个性化)

您可以按如下方式打开图像:

    public static BitmapImage BitmapFromUri(Uri source)
    {
        var bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = source;
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.EndInit();
        return bitmap;
    }
加载图像后,它会立即释放图像


希望能有帮助

还有一些内存问题需要考虑。再见,谢谢。你想让我说,如果你的链接真的不可能,不要尝试缓存所有文件吗?谢谢你的快速回复,关于我的关键字和VB而不是C#!现在效果很好!有没有办法严格使用XAML来实现这一点。感谢Navid的快速回复。据我所知,这将起作用。我现在使用的是
bmi.EndInit()
methode+
OnLoad
,这在我的例子中稍微简单一点。现在,谁拥有MemoryStream对象实例并负责处理它?无论如何。。。如何解锁文件并将其删除?
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
    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));