Solución:
puede ser un problema de recolección de basura.
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
File.Delete(picturePath);
Para liberar un archivo de imagen después de cargarlo, debe crear sus imágenes configurando el BitmapCacheOption.OnLoad
bandera. Una forma de hacer esto sería la siguiente:
string filename = ...
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(filename);
image.EndInit();
Aunque estableciendo BitmapCacheOption.OnLoad
funciona en un BitmapImage que se carga desde un archivo local Uri, esto no está documentado en ninguna parte. Por lo tanto, una forma probablemente mejor o más segura es cargar la imagen desde un FileStream, configurando el StreamSource
propiedad en lugar de UriSource
:
string filename = ...
BitmapImage image = new BitmapImage();
using (var stream = File.OpenRead(filename))
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}
Otra forma es eliminar el archivo. Cargue su archivo usando la clase FileStream y libere un archivo a través de stream.Dispose (); nunca le dará la excepción “El proceso no puede acceder al archivo” porque está siendo utilizado por otro proceso “.
using (FileStream stream = new FileStream("test.jpg", FileMode.Open, FileAccess.Read))
{
pictureBox1.Image = Image.FromStream(stream);
stream.Dispose();
}
// delete your file.
File.Delete(delpath);