Problème de "freez" My.Computer.Network.DownloadFile

Résolu
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 - 1 févr. 2015 à 15:39
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 - 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

7 réponses

Bonjour,
c bizarre que ton programme bloque si tu dl via un autre thread peut voir ton code?
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
1 févr. 2015 à 21:56
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
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
1 févr. 2015 à 22:14
je vient de tester mon système de thread et en fait il ne marche pas
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
1 févr. 2015 à 23:10
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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

0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
Modifié par dj naoki le 2/02/2015 à 09:13
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
0
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

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