使用可视化C ++在Window Form Application中进行Sleep()

时间:2013-12-30 09:30:37

标签: c++ winforms visual-c++ c++11

我的问题与 Visual C ++ 中的窗口表单应用程序System::Threading::Thread::Sleep(int delayTime)有关。

我的窗体有一个面板,其中有3个名为ovalShape1,ovalShape2和ovalShape3的ovalShape。按钮名称按钮位于面板旁边。按钮与单击事件相关联。我需要的是当我点击按钮时,每1秒(1000毫秒)后,每个椭圆形的颜色将变为红色。 这就是我所做的:

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

    this->ovalShape1->FillColor = System::Drawing::Color::Red;
    System::Threading::Thread::Sleep(1000);
    this->ovalShape1->FillColor = System::Drawing::Color::White;


    this->ovalShape2->FillColor = System::Drawing::Color::Red;
    System::Threading::Thread::Sleep(1000);
    this->ovalShape2->FillColor = System::Drawing::Color::White;

    this->ovalShape3->FillColor = System::Drawing::Color::Red;
    System::Threading::Thread::Sleep(1000);
    this->ovalShape3->FillColor = System::Drawing::Color::White;

}

但由于某种原因(我不知道),应用程序无法按照我的预期运作。 ovalShape1只是闪烁,就是这样。

也许你知道原因!

任何帮助或建议都将不胜感激!

1 个答案:

答案 0 :(得分:2)

这是因为Windows UI绘图优化。设置椭圆的填充颜色时:

  • 新颜色存储在FillColor属性
  • 计划在处理完成后完成重绘。

所以你修改了FillColor三次,并为椭圆调度三次重绘。然后你的代码完成,椭圆最终重新粉刷。

您必须在更改颜色后调用ovalShape.Refresh()以强制重绘该控件。