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 :

Progress bar dans un nouveau thread ? [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut Progress bar dans un nouveau thread ?
    Bonjour,

    Voici les éléments de base de mon problème:

    J'ai une form1 sur laquelle je met une Progress Bar nommée "PB" en mode visible = false.
    Dans cette form, j'ai une public sub nommée "Barre" qui va initialiser la Progress bar avec un certain nombre de valeurs.

    J'ajoute au projet une form2 qui Inherits de la form1.
    Sur cette form2, j'ajoute un bouton "BtGo" qui va effectuer 3 taches:
    La première va faire appel à ma sub "Barre" avec le paramètre True (rendre visible la Progress barre)
    La deuxième va effectuer un traitement assez long
    La troisième va faire appel à ma sub "Barre" avec le paramètre false (rendre invisible la Progress barre)

    L'objectif est que lorsque j'appuie sur le bouton "BtGo", la Progress barre devienne visible, que mon traitement long se fasse et qu'à la fin la Progress barre devienne invisible.
    (il faut noter que je ne gere pas ici le pourcentage d'avancement de la tache. Ma progress barre aura la valeur Max-1 dés le départ)

    Le problème:

    La Progress barre ne s'affiche qu'à la fin de mon traitement long.

    Prérogative:

    Je ne souhaite pas utiliser un BackGroundWorker pour l'appel à ma sub "Barre"
    Je souhaite que le code qui est dans "BtGo" reste tel qu'il est (dans la mesure du possible) et que tout se fasse dans la sub "Barre"

    J'ai essayé de créer un nouveau thread mais je ne sais pas gérer les inter-Thread.....

    Code:
    Voici le code de la form1

    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
    Public Class Form1
     
        Public Sub Barre(ByVal Start As Boolean)
     
            If Start = True Then
     
                '*** Paramétrage de la Progress Bar ***
                Pb.Minimum = 0
                Pb.Maximum = 5000
                Pb.Value = 4999 'Valeur maximum - 1
                Dim Pos As New System.Drawing.Point
                Pos.X = 0
                Pos.Y = 10
                Pb.Location = Pos
                'on defini la largeur de la barre, égale à la largeur de la form.
                Pb.Width = Me.Width
                Pb.Visible = True 'parce que la progress bar est visible(false) dans la form1
     
            Else
                Pb.Visible = False
            End If
     
        End Sub
     
    End Class
    et le code de la form2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Class Form2
        Inherits Form1
     
        Private Sub BtGo_Click(sender As System.Object, e As System.EventArgs) Handles BtGo.Click
            'rendre la progress barre visible
            Barre(True)
     
            'appel au traitement long
            '.......
     
            'rendre la progress barre invisible
            Barre(False)
        End Sub
    End Class
    Par avance, merci à tous pour vos réponses.
    Yayou49

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Tout d'abord, tu dis avoir essayés de créer un thread mais sans succès...je pense que c'est principalement ce que tu as essayés de faire qu'il faut nous montrer sans cela il nous sera difficile de t'orienter correctement Même si je reste perplexe à l'idée de ne pas vouloir utiliser un composant BackgroundWorker, ce dernier étant destiné à rendre l'approche de la notion de thread UI bien plus abordable pour les débutants...o_O

    A suivre ...

  3. #3
    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
    Effectivement je ne vois pas pourquoi tu ne veux pas utiliser un BackgroundWorker. C'est fait pour ça, et c'est le moyen le plus simple, vu qu'il prévoit de base la gestion de la progression.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    ton code s'exécute sur un thread qu'on appelle thread principal
    or c'est aussi ce thread qui sert à rafraichir l'interface
    quand on fait quelque chose qui dure plus de quelques centaines de millisecondes ca fige l'interface jusqu'à la sortie de ton code
    il te faut donc utiliser un thread pour faire ton traitement (le bgw est une encapsulation de thread donc il peut convenir aussi)

    tu peux garder ta méthode barre comme est elle mais le code du bouton ne peut pas rester tel quel, il doit démarrer un thread
    donc au lieu de te braquer et de demander l'impossible essaye de comprendre comment modifier l'interface quand on est sur un autre thread (.invoke) ou utilise le bgw qui permet de ne pas comprendre comment le faire justement ^^ (car ses évènements sont sur le thread principal)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne sais pas si c'est ce que tu veux, mais il y a ceci en Caiguisé:

    http://www.codeproject.com/Articles/...read-made-easy

    Une autre affaire en CSharp:

    http://www.codeproject.com/Articles/...-Forms-and-You

    <

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Effectivement je ne vois pas pourquoi tu ne veux pas utiliser un BackgroundWorker. C'est fait pour ça, et c'est le moyen le plus simple, vu qu'il prévoit de base la gestion de la progression.
    J'ai posté un code en c# avec un interface simplifié au maximum ici (voir la 2ème version dans le dernier message de la discussion) :
    http://www.developpez.net/forums/d15...utiliser-avis/

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

Discussions similaires

  1. Progress Bar dans Access
    Par shr3dpit dans le forum VBA Access
    Réponses: 6
    Dernier message: 24/11/2007, 05h52
  2. Progress Bar dans Tkinter ou autre module
    Par will97 dans le forum Tkinter
    Réponses: 3
    Dernier message: 16/03/2007, 23h11
  3. Contrôler progress bar dans IE
    Par gverca dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/01/2007, 12h50
  4. [MFC] Progress Bar dans un CButton
    Par Aymerik dans le forum MFC
    Réponses: 4
    Dernier message: 03/04/2006, 16h39
  5. progress bar dans une status bar ?
    Par raggadoll dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/11/2005, 15h17

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