HandyControl icon indicating copy to clipboard operation
HandyControl copied to clipboard

ImageBrowser Show() 弹框关闭后,图片资源未释放,无法删除图片

Open childeQL opened this issue 1 year ago • 1 comments

Describe the bug

ImageBrowser Show() 弹框关闭后,图片资源未释放,无法删除图片

Steps to reproduce the bug

1、代码中创建ImageBrowser对象,注册Closed事件,并弹框展示 string previewImageFullPath = “D:\tmp\imgPreView\test.jpg” ImageBrowser imageBrowser = new ImageBrowser(); imageBrowser.Closed += ImageBrowser_Closed; imageBrowser.Show();

2、在Closed事件中删除第一步中预览的图片 if (File.Exists(previewImageFullPath )) { File.Delete(previewImageFullPath ); }

Expected behavior

弹框关闭时可以在Closed事件中删除图片,或者弹框关闭后可以删除图片

Screenshots

image

NuGet package version

None

IDE

Visual Studio 2022

Framework type

.Net 6.0

Windows version

No response

Additional context

No response

childeQL avatar Aug 23 '24 16:08 childeQL

+1

Coderyida avatar Oct 12 '24 16:10 Coderyida

解决了吗?也是占用,其他地方要操作就打不开了,为啥不支持BitmapImage啊

L-MAX6 avatar Jan 14 '25 08:01 L-MAX6

解决了吗?也是占用,其他地方要操作就打不开了,为啥不支持BitmapImage啊

升级版本吧 升级后貌似没这个问题

Coderyida avatar Jan 14 '25 08:01 Coderyida

解决了吗?同样占用,其他地方操作就打不开,为啥不支持BitmapImage啊

升级版本吧 升级后明显没这个问题

用的是3.5.1了,最新版了

L-MAX6 avatar Jan 14 '25 08:01 L-MAX6

解决了吗?同样占用,其他地方操作就打不开,为啥不支持BitmapImage啊

升级版本吧 升级后明显没这个问题

用的是3.5.1了,最新版了

事实上 github上代码是3.5.2 但是Nuget上面的还是3.5.1 我是直接把代码拉下来的

Coderyida avatar Jan 14 '25 08:01 Coderyida

解决了吗?同样占用,其他地方操作就打不开,为啥不支持BitmapImage啊

升级版本吧 升级后明显没这个问题

用3的是.5.1了,最新版本了

其实github上代码是3.5.2但是Nuget上面的还是3.5.1我是直接把代码拉下来的

用代码生成的dll,就解除释放了,快速切换还是有时候会没释放到或者说没释放完。 image

L-MAX6 avatar Jan 14 '25 09:01 L-MAX6

解决了吗?同样占用,其他地方操作就打不开,为啥不支持BitmapImage啊

升级版本吧 升级后明显没这个问题

用3的是.5.1了,最新版本了

其实github上代码是3.5.2但是Nuget上面的还是3.5.1我是直接把代码拉下来的

用代码生成的dll,就解除释放了,快速切换还是有时候会没释放到或者说没释放完。 image

一直没解决这个问题,完了试一下这个方式,感谢兄弟。

childeQL avatar Jan 16 '25 14:01 childeQL

解决了吗?同样占用,其他地方操作就打不开,为啥不支持BitmapImage啊

升级版本吧 升级后明显没这个问题

用3的是.5.1了,最新版本了

其实github上代码是3.5.2但是Nuget上面的还是3.5.1我是直接把代码拉下来的

用代码生成的dll,就解除释放了,快速切换还是有时候会没释放到或者说没释放完。 image

一直没解决这个问题,完了试一下这个方式,感谢兄弟。

还是有问题的,直接改源代码吧 ///

/// 带一个图片Uri的构造函数 /// /// public ImageBrowser(Uri uri) : this() { Loaded += (s, e) => { try { // 使用 BitmapFrame.Create 并指定 BitmapCacheOption.OnLoad var bitmapFrame = BitmapFrame.Create( uri, BitmapCreateOptions.None, BitmapCacheOption.OnLoad // 确保加载完成后释放文件锁定 );

         _imageViewer.ImageSource = bitmapFrame;
         _imageViewer.ImgPath = uri.AbsolutePath;

         if (File.Exists(_imageViewer.ImgPath))
         {
             var info = new FileInfo(_imageViewer.ImgPath);
             _imageViewer.ImgSize = info.Length;
         }
     }
     catch
     {
         MessageBox.Show(Properties.Langs.Lang.ErrorImgPath);
     }
 };

}

L-MAX6 avatar Jan 18 '25 03:01 L-MAX6

最后把这个控件的源码复制出来,在自己的项目里进行了修改,修改后的文件我放在下边了,解压后可以放在自己的项目里,cs文件里将命名空间修改成自己项目的。xaml是样式资源文件,全局加载一下。使用的时候将原来的ImageBrowser类型替换成ImageBrowserExtension即可。

ImageBrowser扩展.zip

childeQL avatar Mar 05 '25 16:03 childeQL