我的问题与 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只是闪烁,就是这样。
也许你知道原因!
任何帮助或建议都将不胜感激!
答案 0 :(得分:2)
这是因为Windows UI绘图优化。设置椭圆的填充颜色时:
所以你修改了FillColor三次,并为椭圆调度三次重绘。然后你的代码完成,椭圆最终重新粉刷。
您必须在更改颜色后调用ovalShape.Refresh()
以强制重绘该控件。