[Site du Zero]Synchroniser une ProgressBar avec un Téléchargement

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
Site du Zero :Le premier code est à mettre dans les fonctions du bouton(Ou d'autre chose) , Dans cette exemple le bouton s'appelle "start"
Code:
Dim Client As WebClient = New WebClient
        AddHandler Client.DownloadProgressChanged, AddressOf client_ProgressChanged
        AddHandler Client.DownloadFileCompleted, AddressOf client_DownloadCompleted

        Client.DownloadFileAsync(New Uri("Adresse du fichier à télécharger"), "Nom du fichier à télécharger.extension")
       
       
        start.Text = "Téléchargement en cours" 'Affiche sur le boutton "Téléchargement en cours
        start.Enabled = False 'Désactive le bouton(On ne peut pas cliquer

Ensuite créer deux nouveau sub :
Code:
Private Sub client_ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)

        Dim bytesIn As Double = Double.Parse(e.BytesReceived.ToString())
        Dim totalBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString())
        Dim percentage As Double = bytesIn / totalBytes * 100

         
        ProgressBar.Value = Int32.Parse(Math.Truncate(percentage).ToString())
        Label1.Text = ProgressBar.Value & "%"
    End Sub

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

        MessageBox.Show("Téléchargement Terminé !")

        start.Text = "Téléchargement Terminé !"

        start.Enabled = False
       
    End Sub

Plus (Par moi): Il ne vous reste plus qu'a faire une vérification de version
Code:
        Dim maversion = GetSetting("Appname", "Section", "Key", "")
        Dim newversion = Client.DownloadString("Lien du txt")
        If not maversion = newversion Then
  MsgBox("Grouille toi ! Il y a une Maj !", MsgBoxStyle.Information, "Maj")
'Ici vous mettez le code du bouton ou alors :
start.enabled = True
 

egonegon

Membre actif
Jun 22, 2011
177
7
924
Désolé si je up un vieux topic, mais j'ai une question :

Comment pourrions nous télécharger deux fichiers en même temps (l'un après l'autre) et ce, dans la même progressbar ?

Merci d'avance.
 

will62

Membre
Jun 18, 2011
62
0
912
Chez moi le label et la porgressbar ne se mettent a jour que a la fin du telechargement ( Sa passe de 0 a 100 ) help please !
 

Ben

Master Chief
V
Ancien staff
Mar 3, 2011
4,069
3
944
Un peut partout.
Rajoute un Application.DoEvents()

Ou encore mieux, utilise un Backgroundworker.
(par contre il faudra changer pas mal de choses si tu en utilise un)
 

will62

Membre
Jun 18, 2011
62
0
912
J'ai regarder sur msdn mais je ne comprend pas comment utiliser un Application.Doevents()
 

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
Rien à comprense : tu as par exemple une boucle infini, tu veux cliquer sur un bouton pendant cette boucle
Dans la boucle tu mets application.doevents() si tu fait qqcs sur ta form ça le fera sans sortir de la boucle
 

Ben

Master Chief
V
Ancien staff
Mar 3, 2011
4,069
3
944
Un peut partout.
Tiens voilà : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

Sinon le application.doevents sert (en simplifié) à permettre à l'application de traiter les différentes information reçu pendant le fonctionnement d'un sub/fonction qui en temps normal ne traite pas les information de suite et attends la fin de la tache qui lui est donné pour les traiter.

Exemple :
Private Sub client_ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
Dim bytesIn As Double = Double.Parse(e.BytesReceived.ToString())
Dim totalBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString())
Dim percentage As Double = bytesIn / totalBytes * 100
ProgressBar.Value = Int32.Parse(Math.Truncate(percentage).ToString())
Label1.Text = ProgressBar.Value & "%"
Application.Doevents()
End Sub
 

will62

Membre
Jun 18, 2011
62
0
912
Tiens voilà : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

Sinon le application.doevents sert (en simplifié) à permettre à l'application de traiter les différentes information reçu pendant le fonctionnement d'un sub/fonction qui en temps normal ne traite pas les information de suite et attends la fin de la tache qui lui est donné pour les traiter.

Exemple :

Merci , mais en fait , mon probleme etait que je n'avais pas mit le dossier ou serait telecharger le fichier , mais juste son Nom.Extension .
 

will62

Membre
Jun 18, 2011
62
0
912
Bonjour
J'aimerais que l'application n'execute pas le code apres pendant le téléchargement du fichier . ( Sans passer par client_downloadCompleted)

Exemple
Private Sub DL
Client.DownloadFileAsync(New Uri("Adresse du fichier à télécharger"), "Nom du fichier à télécharger.extension")
MsgBox("Dl Fini")
'Le Msgbox doit s'afficher a la fin du dl
End Sub
 

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
Avec un
While e.BytesReceived.ToString() <> e.TotalBytesToReceive.ToString())
Application.doevent()
Endwhile
Le code est juste un modèle, la syntaxe n'est pas forcement juste