Release handle on file. ImageSource from BitmapImage

c#, wpf, xaml

Solution

Found the answer on MSDN Forum.

Bitmap stream is not closed unless caching option is set as BitmapCacheOption.OnLoad. So you need something like this:

public static ImageSource BitmapFromUri(Uri source)
{
    var bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.UriSource = source;
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.EndInit();
    return bitmap;
}

And when you get an ImageSource using the method above, source file will be immediately closed.

see MSDN social forum

Problem

How can I release the handle on this file? img is of type System.Windows.Controls.Image ``` private void Load() { ImageSource imageSrc = new BitmapImage(new Uri(filePath)); img.Source = imageSrc; //Do Work imageSrc = null; img.Source = null; File.Delete(filePath); // File is being used by another process. } ``` Solution ``` private void Load() { ImageSource imageSrc = BitmapFromUri(new Uri(filePath)); img.Source = imageSrc; //Do Work imageSrc = null; img.Source = null; File.Delete(filePath); // File deleted. } public static ImageSource BitmapFromUri(Uri source) { var bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = source; bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.EndInit(); return bitmap; } ```

Original source