我有一个WPF应用程序,它使用一些本地存储在机器中的图像文件。作为清理过程,我必须在应用程序关闭时删除所有图像。
为了清除我正在使用IDisposable和调用方法来删除Image文件,但是方法抛出异常,即文件无法被删除,因为它被进程使用。
实现析构函数并从中调用清理方法工作正常并清除所有文件,但我不允许使用它。
需要帮助才能从我可以调用清理的位置获取该特定位置。
仅供参考,下面的代码用于通过实现IDisposable来删除图像。
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
this.CleanUp();
this.disposed = true;
}
}
}
void CleanUpModule(object sender, EventArgs e)
{
var folderPath =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Somelocation\\IconImages\\");
if (Directory.Exists(folderPath) == false)
{
return;
}
// Clean all the temporary files.
foreach (var file in Directory.GetFiles(folderPath))
{
File.Delete(file);
}
}
答案 0 :(得分:2)
一种解决方案是将图像读取到临时流并在读取图像后关闭流。您可以愉快地删除原始文件,因为它们实际上不再被该过程掩盖。
var bmpImg = new BitmapImage();
using (FileStream fs = new FileStream(@"Images\1.png", FileMode.Open, FileAccess.Read))
{
// BitmapImage.UriSource/StreamSource must be in a BeginInit/EndInit block.
bmpImg.BeginInit();
bmpImg.CacheOption = BitmapCacheOption.OnLoad;
bmpImg.StreamSource = fs;
bmpImg.EndInit();
}
imageControl.Source = bmpImg;