Meilleur auteur de réponses
Libérer mon fichier du webbrowser

Question
-
Bonjour,
J'utilise un webbrowser pour afficher des fichiers (notamment des vidéos).
Lorsque j'ai fini de visionner ces vidéos, je veux les déplacer (ou copy/delete ce qui revient au même).
Problème : j'ai une erreur (classique) :
Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus.
Bien sur je ne peux pas faire WebBrowser.dispose() car sinon je n'ai plus de webbrowser pour la suite....
des idées?
Merci.
Réponses
-
Ok !! J'ai pu reproduire le problème.
Voila ce que j'ai fait pour solutionner ce souci !!
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.WebBrowser1.Navigate("c:\movie.html") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.WebBrowser1.Navigate("about:blank") End Sub Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted If WebBrowser1.Url.OriginalString = "about:blank" Then IO.File.Move("c:\test.mov", "d:\test.mov") End If End Sub
En fait je demande le déplacement de la vidéo seulement une fois qu'il aura fini de charger "about:blank". ça marche pour moi, tiens moi au courant si cela solutionne le problème chez toi.- Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
-
Wouééééééééééé!!
Ca marche!!!!
Merci mille fois!
J'ai adapté ton idée à mon cas mais ta solution marche!
Je met ma solution au cas ou cela serve à quelqu'un:
Dim IsAboutBlank as boolean =True Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.WebBrowser1.Navigate("c:\movie.html") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click WaitBlank() IO.File.Move("c:\test.mov", "d:\test.mov") End Sub Sub WaitBlank() VideoWebBrowser.Navigate("about:blank") Do Application.DoEvents() System.Threading.Thread.Sleep(100) If IsAboutBlank Then Exit Do Loop IsAboutBlank = False End Sub Private Sub VideoWebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e _ As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles VideoWebBrowser.DocumentCompleted If VideoWebBrowser.Url.OriginalString = "about:blank" Then IsAboutBlank = True End If End Sub
Voila, plus compliqué mais plus compatible avec mon programme....
Merci encore!- Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
Toutes les réponses
-
-
-
-
pour lire un mov, je suis obligé de passer par un fichier Video.html (dedans je met mon code pour que la page soit juste mon mov qui se lance...)
puis je lis ma vidéo :
WebBrowser.Navigate("C:\...\Video.html")
Et lorsque l'utilisateur le décide, il bouge la video dans un autre répertoire en avant chargeant autre chose avant dans le WebBrowser avec par exemple : WebBrowser.Navigate("C:\....\test.bmp") : ce qui arrete la lecture de la vidéo, j'ai même essayé de temporiser un peu (sleep) après ca mais quoi que je fasse, lorsque je tente de bouger ma video avec :
IO.File.Move(adresseDepart, AdresseArrivée)
me retourne une erreur!!!!
Meme en chargeant quelque chose d'autre dans le WebBrowser, il n'a pas l'air de lacher mon mov (à cause de l'historique qui lui permet de faire WebBrowser.GoBack je pense...).
Du coup il me plante avec l'erreur :
"Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus."
J'ai aussi essayer de faire un Copy, puis un Kill() de ma video mais même erreur.
La seule fois ou j'ai réussi à la bouger (move) c'est en faisant WebBrowser.Dispose() avant, mais ensuite je me retrouve sans WebBrower...
Je voudrai donc trouver comment faire un Dispose() de seulement l'historique, ou en tout cas ce qui garde un lien avec la video lue...
Si ce n'est pas clair, n'hésitez pas à poser des questions.
Merci de votre aide. -
Ok !! J'ai pu reproduire le problème.
Voila ce que j'ai fait pour solutionner ce souci !!
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.WebBrowser1.Navigate("c:\movie.html") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.WebBrowser1.Navigate("about:blank") End Sub Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted If WebBrowser1.Url.OriginalString = "about:blank" Then IO.File.Move("c:\test.mov", "d:\test.mov") End If End Sub
En fait je demande le déplacement de la vidéo seulement une fois qu'il aura fini de charger "about:blank". ça marche pour moi, tiens moi au courant si cela solutionne le problème chez toi.- Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
-
Wouééééééééééé!!
Ca marche!!!!
Merci mille fois!
J'ai adapté ton idée à mon cas mais ta solution marche!
Je met ma solution au cas ou cela serve à quelqu'un:
Dim IsAboutBlank as boolean =True Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.WebBrowser1.Navigate("c:\movie.html") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click WaitBlank() IO.File.Move("c:\test.mov", "d:\test.mov") End Sub Sub WaitBlank() VideoWebBrowser.Navigate("about:blank") Do Application.DoEvents() System.Threading.Thread.Sleep(100) If IsAboutBlank Then Exit Do Loop IsAboutBlank = False End Sub Private Sub VideoWebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e _ As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles VideoWebBrowser.DocumentCompleted If VideoWebBrowser.Url.OriginalString = "about:blank" Then IsAboutBlank = True End If End Sub
Voila, plus compliqué mais plus compatible avec mon programme....
Merci encore!- Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
-