2014-09-11 2 views
0

У меня есть приложение WPF, которое использует некоторые файлы изображений, хранящиеся локально в машине. В процессе очистки я должен удалить все изображения, когда приложение закрывается.Выполнение процесса хранения локально сохраненного файла изображения и невозможности удаления

Для очистки я использую метод IDisposable и call для удаления файлов изображений, но метод выдает исключение, этот файл не может быть удален, поскольку он используется процессом.

При внедрении метода деструктора и вызова метода очистки он отлично работает, и он очищает все файлы, но мне не разрешено использовать его.

Нужна помощь, чтобы получить это конкретное место, откуда я могу позвонить на очистку.

только для справки, ниже код, который я использую для удаления изображений, реализуя 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

@kishoreVM Согласитесь, загрузка изображений с использованием 'Новый BitmapImage (Uri)» является одним из способов, который вызывает проблему. – kennyzx

+1

@ kennyzx Настройка BitmapCacheOption.OnLoad также работает, когда вы загружаете изображение из локального файла Uri. Хотя явно использование (и закрытие) потока, вероятно, является «более безопасным» способом. +1. – Clemens

ответ

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; 
Смежные вопросы