C# 保存本地存储的图像文件且不允许删除的应用过程

C# 保存本地存储的图像文件且不允许删除的应用过程,c#,.net,wpf,C#,.net,Wpf,我有一个WPF应用程序,它使用机器中本地存储的一些图像文件。作为一个清理过程,我必须在应用程序关闭时删除所有图像 为了清除,我正在使用IDisposable并调用方法来删除图像文件,但该方法引发异常,该文件无法删除,因为进程正在使用它 在实现析构函数并从中调用cleanup方法时,它可以很好地清除所有文件,但我不允许使用它 需要帮助才能找到我可以称之为清理的特定位置 下面的代码是我通过实现IDisposable来删除图像的代码,仅供参考 private void Dispose(bool dis

我有一个WPF应用程序,它使用机器中本地存储的一些图像文件。作为一个清理过程,我必须在应用程序关闭时删除所有图像

为了清除,我正在使用IDisposable并调用方法来删除图像文件,但该方法引发异常,该文件无法删除,因为进程正在使用它

在实现析构函数并从中调用cleanup方法时,它可以很好地清除所有文件,但我不允许使用它

需要帮助才能找到我可以称之为清理的特定位置

下面的代码是我通过实现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);
            }

        }

一种解决方案是将图像读取到临时流,并在读取图像后关闭该流。您可以愉快地删除原始文件,因为它们实际上不再受流程的影响

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。