WPF BitmapImage资源无法释放的问题
好些时间没进空间了,先前是因为在忙项目,经常加班,没时间再顾其他了。而之后应该是又犯懒了吧.......
这一个多星期都在做一个练习,用WPF做的,因为也是刚开始学,所以碰到了很多问题,标题这个算比较大的一个了。在这先要感谢一下CSDN里的周药师,再有百度HI里的mickeysullivan,你的文章帮我解决了这个问题。在这换个标题,期望能被容易的搜索到,帮助更多有此问题的同学们。
eg:程序是可以选择图片,把它显示在Image控件里,并把该文件复制到指定的文件下内,最后还可以删除该文件。
==================问题===================
不说其他的了,直接说有问题的代码
BitmapImage bitmap = new BitmapImage(new Uri(pngfile));//pngfile为图片的全路径名
这句话用来上传图片,以便图片在Image中显示。
可问题是,BitmapImage 对象会一直占用它最后使用的那个资源不释放,而且它也没有Dispose()方法可以选择释放,所以总会在删除其某些图片时跳出错误“The process cannot access the file 'F:\2.jpg' because it is being used by another process”,其原因即是F:\2.jpg被占用了。
==========================================
之后我想了很多办法,包括把它换成 用FileStream读取,
或是在using FileStream之前加lock、在new FileStream的参数中加入FileAccess.ReadWrite、FileShare.ReadWrite、以及将bitmap.Clone作为currentImage的Source,都不成功
===============解决方法=============
最后发现初始化BitmapImage可以通过byte[]进行,于是只能通过将png文件读成byte[],再进行BitmapImage的初始化,就没有问题了
浙公网安备 33010602011771号