Pregunta

Mi aplicación ASP.NET tiene una imagen de cultivo y las características de cambio de tamaño. Esto requiere que se suprima la imagen temporal subido. Todo funciona bien, pero cuando intento eliminar una imagen mayor de 80px por 80px me sale un "archivo está bloqueado por otro proceso ..." error, a pesar de que he publicado todos los recursos.

He aquí un fragmento:

System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone(); //advice from another forum
tempimg.Dispose();

img = resizeImage(img, 200, 200); //delete only works if it's 80, 80
img.Save(newpath);
img.Dispose();

File.Delete(temppath);
¿Fue útil?

Solución

Creo que no se está disponiendo el primer ejemplo de imagen asignado a la variable img.

Tenga en cuenta esto en su lugar:

System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone();
tempimg.Dispose();

System.Drawing.Image img2 = resizeImage(img, 200, 200);
img2.Save(newpath);
img2.Dispose();
img.Dispose();

File.Delete(temppath);

Otros consejos

Si crea la imagen de esta manera, no será bloqueado:

using (FileStream fs = new FileStream(info.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    byte[] data = new byte[fs.Length];
                    int read = fs.Read(data, 0, (int)fs.Length);
                    MemoryStream ms = new MemoryStream(data, false);
                    return Image.FromStream(ms, false, false); // prevent GDI from holding image file open
                }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top