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++/CLI Discussion :

Fenetre de chargement


Sujet :

C++/CLI

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut Fenetre de chargement
    Bonjour à tous!

    J'ai créée une form contenant simplement une progressBar.
    Mon but est d'afficher cette form avec la progressBar qui s'incrémente pendant qu'une autre fenetre ëst en train de loader.

    J'ai utilisé l'exemple fourni par Nico-pyright :
    http://www.developpez.net/forums/d36...obleme-thread/

    mais rien à faire la barre de progression de s'incrémente pas.

    Voici le code de ma fenetre de chargement:
    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
     //____________________________________________________________________________________________
    	// avertisseurForm_Load()
    	System::Void avertisseurForm::avertisseurForm_Load(System::Object^  sender, System::EventArgs^  e)
    	{
    		ProgressBarDelegate = gcnew ProgressBarDelegateHandler(this, &avertisseurForm::IncrementerBarre);
    	}
     
    	//____________________________________________________________________________________________
    	// Executer()
    	System::Void avertisseurForm::Executer() 
    	{
    		this->progress->Minimum = 0;
    		this->progress->Maximum = 10;
    		this->progress->Value = 0;
    		this->progress->Step = 1;
     
    		enChargement = true;
     
    		t = gcnew Threading::Thread(gcnew Threading::ThreadStart(this, &avertisseurForm::TacheAEffectuer));
    		t->Start();
    	}
     
    	//____________________________________________________________________________________________
    	// TacheAEffectuer()
    	void avertisseurForm::TacheAEffectuer()
    	{
    		do
    		{
    			//System::Threading::Thread::Sleep(100);
    			this->Invoke(ProgressBarDelegate);
     
    		}while(enChargement);
     
    	}
     
    	//____________________________________________________________________________________________
    	// IncrementerBarre()
    	void avertisseurForm::IncrementerBarre() 
    	{
    		progress->PerformStep();
    		if(progress->Value== progress->Maximum)progress->Value = 0; 
     
    	}
     
    	//____________________________________________________________________________________________
    	// Stoper()
    	void avertisseurForm::Stoper() 
    	{
    		 enChargement = false;
    		 t->Abort();			
    	}
    et voici comment j'appelle le code de cette fenetre à partir d'une autre fenetre:


    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
     //____________________________________________________________________________________________
    	// preparateurProgWaypointsForm_Load()
    	System::Void preparateurProgForm::preparateurProgForm_Load(System::Object^  sender, System::EventArgs^  e)
    	{
    		//Création de la fenetre chargement		
    		avertisseur = gcnew avertisseurForm();
    //On dévoile la fenetre		
    avertisseur->Show();
    //On lance le thread
    		avertisseur->Executer();
     
    		//Creation du tableau de programmation des waypoints
    		CreationTableau(); 
     
    		//Initialisation des tableaux de reference
    		InitTablesReference();
     
    avertisseur->Stoper();
    Quelqu'un aurait il une idée de mon erreur?

    Merci d'avance

    Kemanke

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut Fenetre de Chargement, ProgressBar et Thread
    Mon problème en fait ce n'est pas que cela ne s'execute pas (la fenetre de chargement avec l'incrémentation de la barre de progression), mon problème est que le barre de progression s'incrémente une fois seulement que le fenêtre que j'affiche est loader.

    Alors que ce que j'aimerais avoir est que la fenetre de chargement soit affichée, que la barre de progression s'incrémente pendant que la fenetre que je dois afficher se load.

    J'espère être clair dans mes explications, j'en ai pas l'impression

    Merci de votre aide

    Kemanke

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Re!

    Je vais poser le problème d'une autre manière, j'ai créé plusieurs fenetres type assistant avec bouton suivant, précédant, annuler...

    lorsque je clique sur suivant de ma première fenetre, je veux qu'une fenetre "S'il vous plait patientez" avec une barre de progression s'incrémentant, car le chargement de ma deuxième fenetre est très long due à une création dynamique d'un tablelayout de 50 lignes et de 8 colonnes, sachant que chaque cases contient un contrôle.

    Comment puis je faire cela ... Please Help !!

    Merci d'avance de vos suggestions

    Kemanke

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    la structure a l'air pas trop mal.
    En général, on n'arrete pas un thread comme ca, il vaut mieux avoir des conditions de fins dans la méthode threadée.

    Ensuite, la boucle avec le performstep est executée ton vite à mon avis

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Salut nico-pyright,

    Non je ne pense pas que l'incrementation de la barre se fasse trop vite, car une fois que ma fenetre est chargé, et seulement un fois chargé l'incrémentation se lance (en imaginant que j'enlève le avertisseur->Stopper().

    De plus quand j'ouvre la fenetre de chargement(avertisseur) au moment ou je charge l'autre fenetre, la barre de progression et le label sont transparents.

    J'ai l'impression que le chargement de ma fenetre bouffe tout le CPU, du coup mon avertisseur ne peut pas se lancer correctement.

    Un idée?

    Merci d'avance.

    Kemanke

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    En fait, ma progressBarre est non visible alors sa propriété Visible est à true???

    je dis ça car j'ai mis un point d'arrêt dans la fonction Executer()

    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
     
    //____________________________________________________________________________________________
    	// Executer()	
    	void avertisseurForm::Executer(bool barreVisible,bool quitterVisible, String ^message)
    	{
    		this->labelMessage->Text = message;
    		this->btnQuitter->Visible = quitterVisible;
     
    		if(progress->Visible)
    		{	
    			enExecution = true;
     
    			t = gcnew Threading::Thread(gcnew Threading::ThreadStart(this, &avertisseurForm::TacheAEffectuer));
    			t->Start();
    		}
     
    	}
    Je ne comprend pas pourquoi??
    Je ne modifie jamais cette propriété dans mon code.

    une idée?

    Merci d'avance.

    Kemanke

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Je sais pourquoi ma progressBarre n'etait pas visible:

    je faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    avertisseur->Executer(true,false,"En chargement ...");
    avertisseur->Show();
    par contre quand je faisais cela le texte s'affichait mais la barre de progression non, seul son emplacement était visible(en blanc sur la fenetre).

    Mais par contre si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    avertisseur->Show();
    avertisseur->Executer(true,false,"En chargement ...");

    le texte de s'affiche pas, et la barre de progression est toute blanche, en fait on ne voit que son emplacement mais sa propriété Visible est à true.

    Je ne comprend pas vraiment vraiment

    une idée?

    Merci d'avance

    Kemanke

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    il faut que tu fasses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		CreationTableau(); 
     
    		//Initialisation des tableaux de reference
    		InitTablesReference();
    dans le thread, sinon, cela bloque la fenetre de message et la form n'est pas mise à jour.
    ainsi, plus besoin d'arreter brutalement le thread, il s'arretera quand ces méthodes seront terminées.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Ok merci Nico-pyright je vais essayer cela.

    Merci

    Kemanke

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

Discussions similaires

  1. Thread et fenetre de chargement
    Par exile69 dans le forum C#
    Réponses: 16
    Dernier message: 26/04/2011, 16h33
  2. Faire une fenetre de chargement ?
    Par juliensmarties dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 10/09/2010, 19h20
  3. Réponses: 11
    Dernier message: 27/08/2009, 22h18
  4. Problème fenetre de chargement
    Par krolineeee dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 24/08/2006, 10h11
  5. [C#]Fenetre de chargement avant Application.run()
    Par 5:35pm dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/05/2006, 03h02

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