Pb avec picturebox et objet Bitmap

Résolu
Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007 - 1 oct. 2005 à 13:57
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 1 oct. 2005 à 15:20
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 oct. 2005 à 14:40
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#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 oct. 2005 à 15:20
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#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 oct. 2005 à 14:05
"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#
0
Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007
1 oct. 2005 à 14:12
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 oct. 2005 à 14:19
Il faudrais que tu montres le code incriminé je pense.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007
1 oct. 2005 à 14:31
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
0
Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007
1 oct. 2005 à 14:47
PiLoU
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 oct. 2005 à 15:04
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#
0
Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007
1 oct. 2005 à 15:15
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
0
Rejoignez-nous