C# 保存本地存储的图像文件且不允许删除的应用过程
我有一个WPF应用程序,它使用机器中本地存储的一些图像文件。作为一个清理过程,我必须在应用程序关闭时删除所有图像 为了清除,我正在使用IDisposable并调用方法来删除图像文件,但该方法引发异常,该文件无法删除,因为进程正在使用它 在实现析构函数并从中调用cleanup方法时,它可以很好地清除所有文件,但我不允许使用它 需要帮助才能找到我可以称之为清理的特定位置 下面的代码是我通过实现IDisposable来删除图像的代码,仅供参考C# 保存本地存储的图像文件且不允许删除的应用过程,c#,.net,wpf,C#,.net,Wpf,我有一个WPF应用程序,它使用机器中本地存储的一些图像文件。作为一个清理过程,我必须在应用程序关闭时删除所有图像 为了清除,我正在使用IDisposable并调用方法来删除图像文件,但该方法引发异常,该文件无法删除,因为进程正在使用它 在实现析构函数并从中调用cleanup方法时,它可以很好地清除所有文件,但我不允许使用它 需要帮助才能找到我可以称之为清理的特定位置 下面的代码是我通过实现IDisposable来删除图像的代码,仅供参考 private void Dispose(bool dis
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);
}
}
一种解决方案是将图像读取到临时流,并在读取图像后关闭该流。您可以愉快地删除原始文件,因为它们实际上不再受流程的影响
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;
我认为你如何使用这些图像也很重要。。应该有一些发布代码happen@kishoreVM同意,使用“new BitmapImage(Uri)”加载图像是导致问题的一种方法。@kennyzx设置BitmapCacheOption.OnLoad在从本地文件Uri加载图像时也起作用。尽管明确使用(并关闭)流可能是“更安全”的方法。+1。