2

WindowsフォームプロジェクトでSleep()関数を使用するのが好きですが、Sleep()は何よりも先に実行されます。fflush()を使用してフラッシュする必要があることを読みましたが、何をフラッシュするかわかりません。誰かが私を助けることができますか?

コード:

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);

         }
4

1 に答える 1

6

の呼び出しSleep()はメイン(UI)スレッドをブロックしているため、メッセージポンプがコントロールを更新できません。

Sleepこの場合、呼び出しがUIをブロックする以外の目的を果たしているようには見えません。ボタンが再度押されないようにする場合は、ボタンを無効にしてからタイマーを使用することをお勧めします( System::Windows::Forms::Timer)ボタンを再度有効にするために500ミリ秒間隔で。

タイマーを使用することで、UIスレッドをブロックすることはなく、コントロールをアクティブに保つことができますが、ユーザーがボタンを押すことはできません。

于 2013-01-02T21:07:01.333 に答える