2013-01-02 3 views
2

J'aime utiliser la fonction Sleep() dans un projet Windows Forms, mais Sleep() est exécuté avant toute autre chose. J'ai lu que je devrais rincer en utilisant fflush(), mais je ne sais pas quoi tirer. Est-ce que quelqu'un peut m'aider?Visual Studio 2010 C++ Sleep()

Le code:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {      

      this->label1->Visible= false; 
      this->button1->Visible= false; 


      r = (float)rand()/(float)RAND_MAX;        
      r = r*100000; 
      i = r; 
      r = r - i;    

      String^ strR = "" + r; 
      this->label2->Text = strR; 


      if(r >= 0.5) 
      { 
       this->pictureBox1->Visible= true; 
       this->pictureBox1->BackColor = System::Drawing::Color::Blue;      
      } 
      else 
      { 
       this->pictureBox1->Visible= true; 
       this->pictureBox1->BackColor = System::Drawing::Color::Red;           
      } 

      Sleep(500); 

     } 
+0

une question: pourquoi programmez-vous en C++ - cli alors que vous seriez beaucoup plus en sécurité si vous écrivez C#? –

+0

Je ne connais que la syntaxe C++. – imi007

Répondre

6

L'appel à Sleep() bloque votre thread principal (UI), ce qui empêche la pompe de message de mise à jour de vos commandes.

Dans ce cas, il ne semble pas que l'appel à Sleep ait vraiment un but autre que le blocage de votre interface utilisateur - si vous voulez empêcher le bouton d'être enfoncé à nouveau, une meilleure option serait de le désactiver, puis utilisez une minuterie (System::Windows::Forms::Timer) avec un intervalle de 500 ms pour réactiver le bouton. En utilisant une minuterie, vous ne pouvez pas bloquer le thread de l'interface utilisateur, ce qui permet à vos contrôles de rester actifs, mais vous empêchez toujours l'utilisateur d'appuyer sur le bouton.