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 :

problème de thread


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 99
    Points : 76
    Points
    76
    Par défaut problème de thread
    Bonjour,
    J'utilise Visual C++ 2005 express en WinForm.
    J' essaye l'exemple http://drq.developpez.com/dotnet/articles/threads/ pour faire fonctionné un progressBar avec un thread, mais ma progressBar ne décolle pas. J'ai essayé d'adapter la doc pour du WinForm mais il doit y avoir un problème au niveau de l'Object.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    array<Object^>^ object = gcnew array<Object^>(12); // 12, essai aussi i.
    this->Invoke(this->ProgressBarDelegate, object[i]);
    Ma feuille ce lance, j'appuie sur mon button est rien ne ce passe. Je ferme par la croix windows et une erreur arrive :
    Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans System.Windows.Forms.dll

    Informations supplémentaires*: Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé.

    Voici mon code complet :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    #pragma once
     
    namespace ThreadTest {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Threading;
     
    	/// <summary>
    	/// Description résumée de Form1
    	///
    	/// AVERTISSEMENT*: si vous modifiez le nom de cette classe, vous devrez modifier la
    	///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
    	///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
    	///          les concepteurs ne pourront pas interagir correctement avec les ressources
    	///          localisées associées à ce formulaire.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form {
    			private : delegate void ProgressBarDelegateHandler(int step);
    			private : ProgressBarDelegateHandler^ ProgressBarDelegate;
     
    	public:
    		Form1(void) {
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			// Sur appel du délégué, la méthode UpdateProgressBar est donc appelé
    			ProgressBarDelegate = gcnew ProgressBarDelegateHandler(this, &ThreadTest::Form1::UpdateProgressBar);
    		}
     
    	protected:		
    		/// <summary>
    		/// Nettoyage des ressources utilisées.
    		/// </summary>
    		~Form1() {
    			if (components) {
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::ProgressBar^  progressBar1; 
    	private: System::Windows::Forms::Button^  button1;
    			 System::ComponentModel::Container ^components;
    	private:
    		/// <summary>
    		/// Variable nécessaire au concepteur.
    		/// </summary>
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->progressBar1 = (gcnew System::Windows::Forms::ProgressBar());
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// progressBar1
    			// 
    			this->progressBar1->Location = System::Drawing::Point(114, 49);
    			this->progressBar1->Name = L"progressBar1";
    			this->progressBar1->Size = System::Drawing::Size(350, 35);
    			this->progressBar1->TabIndex = 0;
    			// 
    			// button1
    			// 
    			this->button1->Location = System::Drawing::Point(226, 117);
    			this->button1->Name = L"button1";
    			this->button1->Size = System::Drawing::Size(103, 32);
    			this->button1->TabIndex = 1;
    			this->button1->Text = L"button1";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(668, 273);
    			this->Controls->Add(this->button1);
    			this->Controls->Add(this->progressBar1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
     
    		}
    #pragma endregion
    //*******************************************************
    	private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) {
    			progressBar1->Minimum = 0;
    			progressBar1->Maximum = 10;
    			// Lancement du thread
    			Thread^ t = gcnew Thread(gcnew ThreadStart(this, &ThreadTest::Form1::ThreadProcess));
    			t->Start();
    		}
    //***************************************
    		private: void ThreadProcess() {
    			for(int i = 0 ; i < 11 ; i++) {
    				// Déclenche la mise à jour de l'interface
    				array<Object^>^ object = gcnew array<Object^>(12);
    				this->Invoke(this->ProgressBarDelegate, object[i]);  //, gcnew object[] {i}
    				Thread::Sleep(1000);
    			}
    		}
    //****************************************		
    		private: void UpdateProgressBar(int step) {
    			// Mise à jour de la barre de progression
    			progressBar1->Value = step;
    		}
    //***********************************************************
    };
    }
    De l'aide serait la bien venu.

    Merci d'avance.

  2. #2
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    tiens, petite démo
    Fichiers attachés Fichiers attachés

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 99
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Super génial, un grand MERCI nico
    @+

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

Discussions similaires

  1. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 16h35
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 11h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 17h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 11h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 23h22

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