Question

Mon application ASP.NET a une culture de l'image et des fonctionnalités de redimensionnement. Cela exige que l'image temporaire téléchargé est supprimé. Tout fonctionne très bien, mais quand je tente de supprimer une image plus grande que 80px par 80px je reçois un « fichier est verrouillé par un autre processus ... » erreur, même si je suis libéré de toutes les ressources.

Voici un extrait:

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);
Était-ce utile?

La solution

Je pense que vous n'êtes pas disposer la première instance d'image affectée à la variable img.

Considérez ceci:

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);

Autres conseils

Si vous créez l'image de cette façon, il ne sera pas verrouillé:

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
                }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top