Problème de "freez" My.Computer.Network.DownloadFile [Résolu]

dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention - 1 févr. 2015 à 15:39 - Dernière réponse : dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention
- 2 févr. 2015 à 17:53
Bonjour,
je sollicite aujourd'hui encore votre aide car (comme le nom du topique l'indique), mon appli freez quand j'utilise My.Computer.Network.DownloadFile. elle freez aussi quand j'utilise DownloadFileAsync.
j'ai essayer d'utiliser un thread mais ca n'a rien donner. dans le cas ou j'ai utiliser DownloadFileAsync je clique sur mon bouton il freez et le téléchargement commence alors il défreez. et dans le cas ou j'ai utiliser My.Computer.Network.DownloadFile il freez pendant tout le téléchargement.

avez vous une solution
merci :p
Afficher la suite 

8 réponses

Répondre au sujet
0
Utile
Bonjour,
c bizarre que ton programme bloque si tu dl via un autre thread peut voir ton code?
Commenter la réponse de Rykudos
dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention - 1 févr. 2015 à 21:56
0
Utile
merci a toi d'avoir répondu . voila mon code :


Imports System.Threading
Public Class Form1
Delegate Sub down(ByVal url As String)
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim t As New Thread(New ThreadStart(Sub() download("mon url")))
t.Start()

End Sub

Private Sub download(ByVal url As String)
If InvokeRequired Then
Invoke(New down(AddressOf download), url)
Else
My.Computer.Network.DownloadFile(url, "c:\temp\test.mp3")
End If

End Sub
End Class



ps il est possible que mon thread soir foireux je ne maitrise pas encore très bien ce truc

merci
Commenter la réponse de dj naoki
dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention - 1 févr. 2015 à 22:14
0
Utile
je vient de tester mon système de thread et en fait il ne marche pas
Commenter la réponse de dj naoki
dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention - 1 févr. 2015 à 23:10
0
Utile
j'ai réussi a faire en sorte que ca marche. pour ceux que ca intéresse :


Imports System.Threading
Public Class Form1
Private Delegate Sub down()
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim t As New Thread((AddressOf downlo))
t.Start()
End Sub

Private Sub download()
While True
Invoke(New down(AddressOf downlo))
End While



End Sub
Private Sub downlo()
My.Computer.Network.DownloadFile("mon fichier", "c:\temp\test.mp3")
End Sub
End Class



maintenant le top ca serais d'avoir une progressbar pour suivre la progression mais la j'avoue que je n'y arrive pas. j'ai trouver des petit bouts de code mais je ne parvient pas a utiliser les threads dusse.
merci
Commenter la réponse de dj naoki
0
Utile
avant de démarrer ton thread il te faut récupérer la taille du fichier a télécharger, puis juste après avoir démarrer le thread tu lance un timer (maxvalue a 100) ou tu récupere la taille du fichier (local) , puis tu fait un produit en croix
( taille du fichier local x 100 ) / taille du fichier ftp et le resultat obtenu donne la valeur de la progressbar.



Imports System.Threading
Imports System.Net

Public Class Form1

Dim tailleFichftp
Dim fichlocal
Dim fichftp

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim user = ""
Dim pass = ""
fichlocal = "" 'Liens du fichier local
fichftp = "" 'lien du fichier ftp

Try
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(fichftp), FtpWebRequest)
request.Method = WebRequestMethods.Ftp.GetFileSize
request.Credentials = New NetworkCredential(user, pass)

Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)

tailleFichftp = response.ContentLength

Catch ex As Exception

End Try

Dim dl As New Thread(New ThreadStart(Sub() download(fichftp, fichlocal, user, pass)))
dl.Start()


Timer1.Start()

End Sub


Private Sub download(ByVal fichftp As String, ByVal fichlocal As String, ByVal user As String, ByVal pass As String)

Try

My.Computer.Network.DownloadFile(fichftp, fichlocal, user, pass)

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim info As New System.IO.FileInfo(fichlocal)
Dim tailleFichlocal As Long = info.Length

Dim progress = (tailleFichlocal * 100) / tailleFichftp

ProgressBar1.Value = progress

If ProgressBar1.Value = 100 Then
Timer1.Stop()
ProgressBar1.Value = 0
End If

End Sub
End Class

Commenter la réponse de Rykudos
dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention - Modifié par dj naoki le 2/02/2015 à 09:13
0
Utile
1
merci pour ton code mais le problème c'est que le fichier a télécharger est sur un serveur http et pas un FTP du coup il ne parvient pas a obtenir la taille du fichier. j'avais trouver ce code la, peut tu m'aider a l'adapter ? :


Public Class Form1
Dim wc As System.Net.WebClient
Dim url As String = ""


Private Sub btnButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
wc = New System.Net.WebClient()
AddHandler wc.DownloadProgressChanged, AddressOf OnDownloadProgressChanged
AddHandler wc.DownloadFileCompleted, AddressOf OnFileDownloadCompleted
wc.DownloadFileAsync(New Uri("fichier"), "C:\temp\test.mp3")

Label1.Text = "connection au serveur..."
End Sub

Private Sub OnDownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)

Dim totalSize As Long = e.TotalBytesToReceive
Dim downloadedBytes As Long = e.BytesReceived
Dim percentage As Integer = e.ProgressPercentage
ProgressBar1.Value = percentage
'Put your progress UI here, you can cancel download by uncommenting the line below
'wc.CancelAsync()

End Sub


Private Sub OnFileDownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)

If e.Cancelled Then
'Cancelled
ElseIf Not e.Error Is Nothing Then
'Error occured
Else
'File Downloaded Successfuly
End If

End Sub



ce code marche pour moi mais le problème comme je disais c'est que le temps de la connexion jusqu'au commencement du téléchargement il feez

merci a tous
et si tu essayer comme sa



Dim wc As System.Net.WebClient
Dim url As String = ""

Private Sub btnButton1_Click(sender As Object, e As EventArgs) Handles Button1.Click

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False

Dim dl As New Thread(New ThreadStart(Sub() dld()))
dl.Start()


Label1.Text = "connection au serveur..."

End Sub

Sub dld()

wc = New System.Net.WebClient()
AddHandler wc.DownloadProgressChanged, AddressOf OnDownloadProgressChanged
AddHandler wc.DownloadFileCompleted, AddressOf OnFileDownloadCompleted
wc.DownloadFileAsync(New Uri("fichier"), "C:\temp\test.mp3")

End Sub


Private Sub OnDownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)

Dim totalSize As Long = e.TotalBytesToReceive
Dim downloadedBytes As Long = e.BytesReceived
Dim percentage As Integer = e.ProgressPercentage

ProgressBar1.Value = percentage
ProgressBar1.Refresh()
'Put your progress UI here, you can cancel download by uncommenting the line below
'wc.CancelAsync()

End Sub


Private Sub OnFileDownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)

If e.Cancelled Then
'Cancelled
ElseIf Not e.Error Is Nothing Then
'Error occured
Else
'File Downloaded Successfuly
End If

End Sub

Commenter la réponse de dj naoki
dj naoki 517 Messages postés mercredi 22 décembre 2010Date d'inscription 25 septembre 2016 Dernière intervention - 2 févr. 2015 à 17:53
0
Utile
GENIAL ! tu me sauve la vie !!! je suis trop content :p
Commenter la réponse de dj naoki

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.