Libérer une image [Résolu]

Kaneda Shotaro 49 Messages postés dimanche 14 août 2005Date d'inscription 12 septembre 2009 Dernière intervention - 8 mai 2006 à 17:04 - Dernière réponse : cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 8 mai 2006 à 17:25
3
Merci
Salut,

Pour libérer ton image :

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

/*
coq
MVP Visual C#
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 8 mai 2006 à 18:18
Commenter la réponse de cs_Bidou
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 8 mai 2006 à 19:23
0
Merci
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.
Commenter la réponse de Lutinore
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 8 mai 2006 à 19:25
0
Merci
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#
*/
Commenter la réponse de cs_coq
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 8 mai 2006 à 21:14
0
Merci
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#
Commenter la réponse de MorpionMx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.