2009-04-16 7 views
1

J'ouvre un fichier appelé tempImage.jpg et montrant une forme dans un PictureBox. Je clique ensuite sur un bouton appelé Effacer et le fichier est supprimé de PictureBox en utilisant PictureBox2.Image = Nothing, cependant je ne peux pas supprimer le fichier car il est verrouillé ouvert. Comment puis-je le libérer pour pouvoir le supprimer? J'utilise VB.NET et une application de formulaires.VB.NET Comment puis-je publier un fichier ouvert?

Merci

+0

Afficher le code où vous ouvrez l'image. –

Répondre

7

Lorsque vous utilisez PictureBox2.Image = Nothing vous attendez le garbage collector pour finaliser la ressource avant de le libérer. Vous voulez libérer immédiatement, vous devez disposer de l'image:

Image tmp = PictureBox2.Image 
PictureBox2.Image = Nothing 
tmp.Dispose() 
+1

+1 Pour expliquer * pourquoi * cela fonctionne. –

+0

Salut Jon, j'ai essayé cela avec '.msg' fichier qui ouvert à l'aide' processus' et semble ne pas libérer le file.You une idée? –

3

Si vous utilisez Image.FromFile, vous devez appeler .Dispose() sur l'image. Quand vous allez l'effacer, faites quelque chose comme ...

Image currentImage = pictureBox.Image 

pictureBox.Image = Nothing 

currentImage.Dispose() 

Cela va libérer le fichier.

1

prendre le contrôle du fichier

'to use the image 
    Dim fs As New IO.FileStream("c:\foopic.jpg", IO.FileMode.Open, IO.FileAccess.Read) 
    PictureBox1.Image = Image.FromStream(fs) 

    'to release the image 
    PictureBox1.Image = Nothing 
    fs.Close() 
0

est-il un équivalent à l'utilisation dans vb.net

cette est ce que je ferais en C#

using(filestream fs = new filestream) 
{ 

//whatever you want to do in here 


} 

//closes after your done 
0

Comme je ne peux pas encore commenter (pas assez de points d'expérience), ceci est une réponse er pour le dessus "est-il équivalent à l'utilisation de vb.net"

Oui, dans .Net 2.0 et supérieur, vous pouvez utiliser "Using". Dans .Net 1.0 et 1.1 Toutefois, vous devez disposer si l'objet du bloc finally

Dim fs As System.IO.FileStream = Nothing 
    Try 
     'Do stuff 
    Finally 
     'Always check to make sure the object isnt nothing (to avoid nullreference exceptions) 
     If fs IsNot Nothing Then 
      fs.Close() 
      fs = Nothing 
     End If 
    End Try 

Ajout de la fermeture du flux dans le bloc finally assure qu'il va se fermer peu importe (par opposition à la connexion se ouvre, une ligne de code bombardant en dessous avant que le flux est fermé, et le flux rester ouvert et verrouiller le fichier)

Questions connexes