我正在尝试以编程方式删除文件,但是该文件显然正在被另一个进程(恰好是我的程序)使用。基本上,该程序使用FromUri创建位图从文件夹中加载图像,然后将其加载到Image数组中,该数组又成为堆栈面板的子级。效率不是很高,但是可以。
我试图清除堆栈面板的子项,并使数组中的图像为空,但是我仍然收到IOException告诉我该文件正在被另一个进程使用。
还有其他方法可以从应用程序的进程中删除文件吗?
为了在加载后释放图像文件,您必须通过设置BitmapCacheOption.OnLoad标志来创建图像。一种实现方法是:
BitmapCacheOption.OnLoad
string filename = ... BitmapImage image = new BitmapImage(); image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.UriSource = new Uri(filename); image.EndInit();
尽管该设置BitmapCacheOption.OnLoad适用于从本地文件Uri加载的BitmapImage,但这在任何地方都没有记载。因此,一种可能更好或更安全的方法是通过设置StreamSource属性而不是来从FileStream加载图像UriSource:
StreamSource
UriSource
string filename = ... BitmapImage image = new BitmapImage(); using (var stream = File.OpenRead(filename)) { image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = stream; image.EndInit(); }