我正在编写一个Image Manager WPF应用程序.我有一个带有以下ItemsTemplate的ListBox:
请注意,"Image"控件绑定到"FullName"属性,该属性是表示JPG的绝对路径的字符串.
一些应用程序功能要求我更改JPG文件(移动,重命名或删除).当我尝试这样做(当前尝试移动文件)时,我收到一个IOException:"进程无法访问该文件,因为它正由另一个进程使用." 锁定文件的进程是我的WPF应用程序.
我做了一些在线搜索,发现了几个帖子,表明图片特别是放下他们的资源有困难.我尝试过以下方法:
将ListBox.Source设置为null
在尝试移动之前添加10秒的等待时间.
发出GC.Collect().
将操作移动到其他线程.
我还能尝试什么?我想在ItemsTemplate中找到对Image对象的引用并尝试处理Image,但我无法弄清楚如何获取引用.
我读到的一个可能的解决方案是创建图像的副本而不是实际的图像,但由于绑定是文件名而不是实际的图像我不知道我是否可以使这个工作.
任何帮助或建议将非常感激.
我的Intuipic应用程序也允许用户删除图像.我不得不写这个转换器来实现它.相关代码:
//create new stream and create bitmap frame BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = new FileStream(path, FileMode.Open, FileAccess.Read); bitmapImage.DecodePixelWidth = (int) _decodePixelWidth; bitmapImage.DecodePixelHeight = (int) _decodePixelHeight; //load the image now so we can immediately dispose of the stream bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); //clean up the stream to avoid file access exceptions when attempting to delete images bitmapImage.StreamSource.Dispose();