IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Thread et ProgressBar


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Par défaut Thread et ProgressBar
    Bonjour!
    C'est après une dizaine de tuto infructueux que je viens demander un peu d'aide pour la création d'un thread.

    J'avoue n'en avoir jamais fait et je ne comprends pas tout.

    J'ai un logiciel FTP qui affiche une progressbar pendant l'upload d'un fichier.
    L'idée est évidement de pouvoir garder la main sur la form de la progressbar pendant l'upload.

    Voila un wall épuré du code, je vous demanderai d'être sympa avec le code j'ai vraiment pas saisi les différences entre les invoke, les start, les delegate etc

    http://sekren.org/wall/?id=208262900559408

    J'ai donc un objet "dll" qui lance l'upload. sur l'upload j'ai un evenement qui se déclenche tous les 1024 bytes envoyés et que j'écoute sur la form.

    Le reste le comprends pas >.<

    Si quelqu'un peut m'éclairer, merci beaucoup!.

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Tu as déjà essayé via un BackgroundWorker ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Par défaut
    Non

    Je m'essaye à ce système alors, merci pour le tuyau!

    Je mettrais en résolu quand ça fonctionnera ^^

    EDIT : top! Merci encore!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Evidemment le backgroundworker est plus simple à utiliser... mais c'est quand même intéressant de voir ce qui ne va pas dans ton code avec le thread.

    En fait tu t'y prends de travers : tu lances le traitement "lourd" (l'upload) dans le thread principal (celui de l'interface graphique, dans frmMain_Load), et tu fais dans un autre Thread les petits traitements de mise à jour de l'interface (enfin, si j'ai bien compris...). Alors que c'est le contraire qu'il faut faire !

    Voilà ce que j'aurais fait (en partant de ton code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Public Class frmMain
        Private WithEvents oDll As dll
        Private iLocalSize As Long
        Private iByteDone = 0
        Private Delegate Sub ProgressBarDelegateHandler(ByVal [step] As Long)
        Private ProgressBarDelegate As ProgressBarDelegateHandler
        Private t As New Thread(New ThreadStart(AddressOf ThreadProcess))
     
        Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            oDll = New dll
            '[..]
            ProgressBarDelegate = New ProgressBarDelegateHandler(AddressOf UpdateProgressBar)
            t.Start()
        End Sub
     
     
        Private Sub oDll_ByteEnvoye(ByVal theDll As FasT_uPload_Lib.dll, ByVal theByte As Long) Handles oDll.ByteEnvoye
            iByteDone += theByte
            Dim lg As Long = (iByteDone / iLocalSize) * 100
            ' On est dans le thread de l'upload, donc on passe par un Invoke pour mettre à jour la progressbar
            Me.Invoke(Me.ProgressBarDelegate, lg)
        End Sub
     
        Private Sub UpdateProgressBar(ByVal step As Long)
            ' Mise à jour de la barre de progression
            ' Cette fonction DOIT s'exécuter sur le thread de l'interface
            pb.Value = step
            Me.Refresh()
        End Sub
     
        Private Sub ThreadProcess()
            ' On fait l'upload dans le thread
            oDll.UploadFile(LocalPath, DistantPath + Names.GetValue(Names.Length - 1))
            ' la mise à jour de la progress bar est faite dans l'évènement ByteEnvoye
        End Sub
    End Class
    Comme tu vois, il n'y avait pas grand chose à changer, j'ai juste déplacé quelques instructions...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 01/09/2010, 16h22
  2. [PERL/TK] Thread et ProgressBar
    Par remix55 dans le forum Interfaces Graphiques
    Réponses: 19
    Dernier message: 31/08/2010, 18h40
  3. Problème Thread et progressbar
    Par AnsuzPeorth dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 19/03/2010, 12h56
  4. thread et progressBar sous Visual C++
    Par goingoin dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 19/03/2009, 16h59
  5. Background Thread et ProgressBar
    Par bgcode dans le forum VB.NET
    Réponses: 17
    Dernier message: 05/07/2007, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo