应用程序进程保存本地存储的图像文件,不允许删除

时间:2014-09-11 06:55:31

标签: c# .net wpf

我有一个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);
            }

        }

1 个答案:

答案 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;