Abra la imagen del archivo, luego suelte el locking?

Estoy usando la siguiente línea de código para abrir una Image de un archivo:

 pictureBox1.Image = Image.FromFile("test.png"); 

Espero que bloquee el archivo, cargue la imagen en la memoria, establezca pictureBox1.Image en la copia en la memoria y suelte el locking. En realidad, la cerradura no desaparecerá hasta que Dispose() la Image en la memoria. No puedo liberar el locking en el archivo en el disco duro que ya no uso hasta que elimine el archivo en memoria que estoy usando.
El sitio de Microsoft lo menciona en un artículo etiquetado con C #, pero su solución está escrita en Visual Basic , lo cual es inútil para mí.

En resumen: quiero establecer pictureBox1.Image a la imagen almacenada en "test.png" , luego dejar que el usuario edite o elimine "test.png" o lo que sea.

El enfoque con la transmisión no es correcto .

Ver aquí https://stackoverflow.com/a/8701748/355264

Corrija el código del enlace de arriba:

 Image img; using (var bmpTemp = new Bitmap("image_file_path")) { img = new Bitmap(bmpTemp); } 

O mejor aún, use una statement de using (el código siguiente se copia de la publicación [eliminada] de sylon). De esta forma, si Image.FromStream lanza una excepción, puede estar seguro de que la transmisión se cierra inmediatamente.

 using (FileStream stream = new FileStream("test.png", FileMode.Open, FileAccess.Read)) { pictureBox1.Image = Image.FromStream(stream); } 

También puede usar una transmisión para leer la imagen y luego cerrar la transmisión.

 FileStream stream = new FileStream("test.png", FileMode.Open, FileAccess.Read); pictureBox1.Image = Image.FromStream(stream); stream.Close(); 

La forma más fácil que he encontrado es congelar el objeto que contiene el origen (ruta al archivo). Todos los controles que pueden contener una imagen, parecen tener un .Source que, si no es nulo, bloqueará el archivo al que apunta.

Ahora el truco es cambiar el control de la imagen a un estado de “solo lectura”, que luego desbloquea el archivo.

Mi solución:

  private Image CreatePreviewImage() { Image ReportImage = new Image(); Uri path = new Uri(@"C:\Folder\Image1.png"); if (File.Exists(path.OriginalString)) { ReportImage.Name = "Report1"; ReportImage.Source = LoadImageFromFile(path); } return ReportImage; } public ImageSource LoadImageFromFile(Uri path) { BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = path; bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache; bitmap.DecodePixelWidth = 900; bitmap.EndInit(); bitmap.Freeze(); //This is the magic line that releases/unlocks the file. return bitmap; } 

hablar abierto, leer y liberar

     StreamReader streamReader = new StreamReader ("picture.png");
     Mapa de bits tmpBitmap = (Mapa de bits) Bitmap.FromStream (streamReader.BaseStream);
     streamReader.Close ();
     pictureBox1.Image = tmpBitmap; `