2013-01-02 187 views
2

我喜歡在Windows Forms項目中使用Sleep()函數,但Sleep()在其他任何操作之前執行。我讀過我應該使用fflush()刷新,但我不知道要刷新什麼。有人能幫我嗎?Visual Studio 2010 C++ Sleep()

的代碼:

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

一個問題:爲什麼你用C++編程 - cli當你編寫c#時會更安全? –

+0

我只知道C++語法。 – imi007

回答

6

Sleep()該呼叫被阻塞的主(UI)線程,這防止了消息泵從更新控制。

在這種情況下,看起來對Sleep的調用確實起到了阻止用戶界面的作用 - 如果要防止再次按下按鈕,更好的選擇是禁用它,然後使用間隔500毫秒的定時器(System::Windows::Forms::Timer)重新啓用該按鈕。

通過使用一個計時器,您不會阻止UI線程,它允許您的控件保持活動狀態,但您仍然阻止用戶按下按鈕。