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;
}
//***********************************************************
};
} |
Partager