Pb avec picturebox et objet Bitmap

Résolu
Signaler
Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour je suis au bord de la crise de neeeeerfs!!!!

Voila je fais une visionneuse d'image donc on selectionne l'image desirée ds une listbox et elle s'affiche dans la picturebox. Jusque la aucun pb. Mais apres mon logiciel doit proposer une fonction de renommage de fichiers par lot et c la que ca bloque : j'ai une erreur du type "le processus ne peut acceder au fichier car il est deja en cours dutilisation par un autre processus". J'ai pourtant bien utiliser des dispose() sur tt les composant utilisant la bitmap....Si qqun px maider paske la.......je v repasser au VB si ca continu!!!!

Merci d'avance

PiLoU

9 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Essaie ça un peu :
private void listefichiers_SelectedIndexChanged(object sender, System.EventArgs e)
{
if ( imgbmp != null )
{
imgbmp.Dispose();
picturebox.Image = null;
}

imgbmp = Image.FromFile (cheminimage);
picturebox.Image = imgbmp;
}

Ensuite dans ce code là la partie en rouge est inutile, voir dangereuse :
for (int i=0;i<nbrfichiers;i++)
{
picturebox.Image.Dispose();
picturebox.Image=null;
imgbmp.Dispose();

picturebox.Image et imgbmp font référence à la même instance.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Beaucoup de types possède une méthode Parse, Int32 en fait partie :-)
Quant à "l'absence" du problème en VB...

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
"J'ai pourtant bien utiliser des dispose() sur tt les composant utilisant la bitmap"
Et sur l'image elle même ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007

Sur l'image elle meme j'ai aussi fait un dispose() mais snif ca ne marche pas enfin ca marche pour une seule c a d kil me renomme un fichier m plante au suivant....Au secours!!!

PiLoU
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Il faudrais que tu montres le code incriminé je pense.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007

Voici justement le code :

Ma procedure de click sur la liste et qui affiche limage :

private void listefichiers_SelectedIndexChanged(object sender, System.EventArgs e)
{


imgbmp = Image.FromFile (cheminimage);


picturebox.Image = imgbmp;


}


Ma procedure de renommage des fichiers :

for (int i=0;i<nbrfichiers;i++)
{
picturebox.Image.Dispose();
picturebox.Image=null;
imgbmp.Dispose();


for (int j=0;j<listefichiers.SelectedIndices .Count ;j++)
{

if (listefichiers.Items .IndexOf (listefichiers.Items [i])==listefichiers.SelectedIndices [j])
{
cpt++;


anciennom = nomfichier.Text + "\" + listefichiers.Items[i];
nouveaunom = nomfichier.Text + "\" + newnom.Text + cpt;


File.Move(anciennom , nouveaunom);



}
}

}

Voila et ca plante au niveau du renommage en me disant que le fichier est deja occupe par un autre processus et lorske je met en commentaire laffichage ds la picturebox tt se passe bien!!!!
PiLoU
Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007

PiLoU
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Joli le message ;-)
Donc c'est bien ce que je pensais.
Pour la petite explication : à chaque changement tu créais une nouvelle instance de la classe Image sans détruire l'ancienne.
Et si ta machine n'avais pas expressement besoin de mémoire le GC ne libérais pas ça automatiquement avant que tu tentes le move.
D'où l'accès refusé comme le handle de fichier était toujours ouvert.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007

Arf ca na pas marché ct environ 20 lignes de remerciements lol mais grace a toi et ton explication g compris ce que jaurais du comprendre tt seul dailleurs lol en tt k merci et juste une derniere question : g une texbox ds lakelle lutilisateur saisi un nbr de depart pour mon compteur mais aparement le code ne convertit pa le contenu de la textbox en int g essayer (int)textbox.text m rien a faire....Je c c con mais avec VB jamais eu ce pb!!!

PiLoU