elwood973
Messages postés4Date d'inscriptionmardi 15 janvier 2008StatutMembreDernière intervention 6 février 2009
-
5 févr. 2009 à 20:50
elwood973
Messages postés4Date d'inscriptionmardi 15 janvier 2008StatutMembreDernière intervention 6 février 2009
-
6 févr. 2009 à 19:57
Bonjour,
j'ai une form dans laquelle j'affiche des pdf dans un webbrowser quand on clique sur la liste d'un combobox.
Je souhaiterais pouvoir travailler sur ces fichiers PDF (les renommer par exemple) et je dois donc "libérer les ressources".
Je n'ouvre donc pas le fichier d'origine mais je le copie dans un autre dossier et ouvre ce nouveau fichier créé.
Quand je ferme la form, je supprime les dossiers pdf que j'ai copié jusque là. Le problème se produit lorsque je ferme la form est qu'on me dit que le fichier est utilisé par un autre processus et qu'il ne peut donc pas être supprimé. J'ai essayé de fermer AcroRd32 avec un kill ou de faire un dispose sur mon webbrowser mais ça marche pas.
Merci de vos conseil
Si vous avez besoin du code n'hésitez pas à me demander
elwood973
Messages postés4Date d'inscriptionmardi 15 janvier 2008StatutMembreDernière intervention 6 février 2009 5 févr. 2009 à 22:41
Je viens de trouver la solution et complètement au hasard. J'ai placé un msgbox juste pour vérifier une variable et le simple fait que le programme fasse une pause sur le msgbox, la manip a fonctionné. j'ai pu killer acrord32 et je n'ai pas eu de problème. Du coup j'ai remplacé mon msgbox par un "System.Threading.Thread.Sleep(1000)" et ça fonctionne.
Mais est-ce bien normal tout ça, il y a qqchose qui m'échappe. Pourquoi le programme a-t-il besoin de faire une pause à cet endroit???
Voilà le bout de code qui posait problème:
'c'est une partie du code qui s'exécute à la fermeture de la form
For x As Integer = 0 To UBound(Prc)
If Prc(x).ProcessName.ToUpper(New System.Globalization.CultureInfo("fr-FR", False)) = "ACRORD32" Then
System.Threading.Thread.Sleep(1000)
Prc(x).Kill()
End If
Next
Dim dirInfo As New System.IO.DirectoryInfo(My.Settings.CheminConfig & "\Resources")
Dim files() As System.IO.FileInfo = dirInfo.GetFiles("*.pdf")
For Each fichierPDF As String In Directory.GetFiles(My.Settings.CheminConfig & "\Resources")
If Path.GetExtension(fichierPDF) = ".pdf" Then
'la ligne qui posait problème
System.IO.File.Delete(fichierPDF)
End If
Next
Me.Dispose()
elwood973
Messages postés4Date d'inscriptionmardi 15 janvier 2008StatutMembreDernière intervention 6 février 2009 6 févr. 2009 à 19:57
Je vais tenter d'être plus clair.
Mon application affiche des pdf situés sur un partage de réseau.
Je fais une copie (sur l'ordinateur client) du fichier à afficher et j'ouvre en fait ce nouveau fichier. Dans le "formClosed", je programme la suppression des fichiers copiés et ça, ça posait problème. Killer le process AcroRd32 et faire une pause dans le programme ont permis de solutionner le problème mais je comprend pas pourquoi faut faire une pause.