Libérer une image

Résolu
Kaneda Shotaro Messages postés 48 Date d'inscription dimanche 14 août 2005 Statut Membre Dernière intervention 12 septembre 2009 - 8 mai 2006 à 17:04
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 8 mai 2006 à 21:28
J'ai un ToolStrip sur ma Form.
Je crée un Bitmap depuis une image sur l'ordinateur et je l'assigne en fond du ToolStrip :

Bitmap bmp = new Bitmap("C:\Image1.bmp");
toolStrip1.BackgroundImage = bmp;

Ensuite, je cherche à remplacer l'image aussi bien sur le disque dur que dans le ToolStrip. J'ai essayé pas mal de chose mais le fichier sur le disque est toujours utilisé par l'application. J'ai essayé :

toolStrip1.BackgroundImage = null;
bmp = null;

Mais au moment de faire File.Delete("C:\Image1.bmp") ça plante car le fichier est en cours d'utilisation. Comment faire ? Merci.

@+, Kaneda Shotaro

8 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
8 mai 2006 à 17:25
Salut,

Pour libérer ton image :

if ( toolStrip1.BackgroundImage != null )
{
toolStrip1.BackgroundImage.Dispose();
toolStrip1.BackgroundImage = null;
}

/*
coq
MVP Visual C#
*/
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 mai 2006 à 18:18
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 mai 2006 à 19:23
Salut, non c'est pas la même chose, l'élément est marqué "à libérer" si il n'a pas d'autres références dessus, mais la mémoire sera réellement libérée à la prochaine collecte seulement. Sachant que Dispose libère uniquement les ressources non-managées.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 mai 2006 à 19:25
De ce que je sais, ce n'est pas équivalent à un appel à GC.Collect, bien qu'il me semble que ça peut un peu accélérer les choses au niveau de la gestion par le GC, et encore, pas sûr.

Dans mon cas il s'agit plus d'une "habitude" qu'autre chose.
En gros, je pense que si la vie de de l'objet est finie, la référence n'a pas à être différente de null.
Exemple : si par la suite un test de nullité est effectué sur la référence, je suis sûr de prendre le bon chemin car si mon Image a été libérée mais que la référence que je teste ne vaut pas null, l'image ne vaut plus rien, mais mon test me permet de faire appel à sa méthode Save, qui ne marchera pas très bien du coup.

/*
coq
MVP Visual C#
*/
0

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

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 mai 2006 à 21:14
Si ca peut t'interesser Bidou, il y a un très bon chapitre sur le Memory Management dans le livre Programming Microsoft Visual C# 2005 : The Language (chez Ms Press).

D'ailleurs, je recommande ce livre a tout le monde, il est vraiment très instructif.


Mx
MVP C#
0
Rejoignez-nous