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

C# Discussion :

Crée un thread pour lancer une form avec progressbar


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Crée un thread pour lancer une form avec progressbar
    Bonjour,

    Je suis en pleine expérimentation en ce moment, pour faire des test unitaire et de faisabilité, qui vont me servir pour mon projet pour le BTS.

    Je viens de vérifier qu'une arraylist pouvait accepter suffisamment de ligne données en générale je dépasserais pas 1 donnée à la seconde pendant 24h.

    Pour ce faire, j'ai crée un petit programme qui enregistre en fichier TXT plusieurs ligne (100 000 ligne) . Puis je le charge ensuite dans mon arayliste et je l'affiche dans une listebox.

    Cela marche impeccable mais comme je l'avais imaginé (vu la taille) le logiciel est bloqué le temps du traitement.

    Donc je veux faire, dans ce même test, un autre test de faisabilité en créant un thread. Mais je veut que celui-çi affiche une autre Form avec un progressbar.
    Car le projet que je réalise pour mon BTS sera mis en situation par la suite dans mon entreprise (je suis en reconversion) et je connait parfaitement mes collègues qui n'attendront pas 3 secondes que cela s'affiche.
    En affichant cette progressbar au moins ils ne relanceront pas une nouvelle fois le programme.

    j'ai suivi l'un des tuto sur ce site pour crée mon thread et lui passé des paramètres, j'ai réussi et on peut dire que sa marche, car en debug je vois bien l'évolution de la value du progressbar.

    Mais voila, j'arrive pas a initialisé correctement la Form en elle même, soit elle s'affiche mais je suis bloquer. Soit je fait bien mon traitement mais rien ne s'affiche.

    Pouriez vous m'orienté vers un tuto ou des explications. je continu a chercher

    je veut le faire a part de m'a form d'origine car j'aurais a l'utilisé pour plusieurs chose

    merci de votre aide

  2. #2
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    salut,

    en se basant sur un BackgroundWorker plutôt qu'un véritable thread :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    // fenetre classique contenant une progressbar
        // en cas de fermeture préalable, le traitement sera arrétée
        // ele se ferme auto quand le traitement est fini
        public partial class FormWait : Form
        {
            BackgroundWorker bgw;
     
            public FormWait(DoWorkEventHandler MyAsyncMethod)
            {
                InitializeComponent();
     
                bgw = new BackgroundWorker();
                bgw.WorkerReportsProgress = true;
                bgw.WorkerSupportsCancellation = true;
                bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(EndOfWork);
                bgw.ProgressChanged += new ProgressChangedEventHandler(ReportProgressOnProgressBar);
                bgw.DoWork += MyAsyncMethod;
                bgw.RunWorkerAsync();
            }
     
            private void EndOfWork(object sender, RunWorkerCompletedEventArgs evt)
            {
                this.Close();
            }
     
            private void ReportProgressOnProgressBar(object sender, ProgressChangedEventArgs evt)
            {
                this.pgbWait.Value = evt.ProgressPercentage;
            }
     
            private void OnClose(object sender, EventArgs evt)
            {
                bgw.CancelAsync();
                this.Close();
            }
        }
     
        class TaClasseDeTraitement
        {
            // cette méthode est l'argument à donner au constructeur de ta fenêtre d'attente
            public void TonTraitement(object sender , DoWorkEventArgs evt)
            {
                BackgroundWorker b;
                if (sender != null && sender.GetType() == typeof(BackgroundWorker))
                    b = sender as BackgroundWorker;
                else //cette méthode peut être appelée depuis aillerus que ta fenêtre d'attente
                    b = new BackgroundWorker();
     
                // traitement
                b.ReportProgress(10);
                // traitement à nouveau
                b.ReportProgress(20);
                // etc...
            }
        }
    C'est pas parfait, mais ça devrait bien fonctionner

    @+

  3. #3
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Je connaissais pas du tout un BackgroundWorker . je vais tester sa, merci beaucoup

  4. #4
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Il me met une erreur sur

    Erreur:
    Ce BackgroundWorker précise qu'il ne signale aucune progression. Modifiez WorkerReportsProgress afin qu'il signale bel et bien une progression.
    Je cherche de mon coté.

    Et il faudrait que je puisse initialisé le progressbar avec la valeur maximum.

  5. #5
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Etrange,

    si tu as bien mit cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bgw.WorkerReportsProgress = true;
    ça devrait marcher.

  6. #6
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par thelpi Voir le message
    Etrange,

    si tu as bien mit cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bgw.WorkerReportsProgress = true;
    ça devrait marcher.
    Oui oui, j'ai bien mis, j'ai fait un copier coller.

Discussions similaires

  1. Problème pour lancer une application avec Java
    Par bintij dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 23/10/2011, 20h49
  2. Comment utiliser jsGraphics pour dessier une forme avec du texte dessus
    Par derzy971 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/04/2010, 02h35
  3. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2007, 13h31
  4. [D7] Lancer une form avec un effet graphique
    Par dacid dans le forum Delphi
    Réponses: 21
    Dernier message: 25/05/2007, 11h05
  5. Comment attendre que tous les thread lancés soient morts pour lancer une action.
    Par rgesnot dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 31/03/2007, 20h27

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