我的问题与 Visual C++ 中的 Window Form Application 和 System::Threading::Thread::Sleep(int delayTime)
有关.
我的窗体有一个面板,其中有 3 个 ovalShape,分别命名为 ovalShape1、ovalShape2 和 ovalShape3。按钮名称按钮位于面板旁边。按钮与点击事件相关联。我需要的是当我点击按钮时,每 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 只是闪烁而已。
也许你知道原因!
如有任何帮助或建议,我们将不胜感激!
最佳答案
这是因为 Windows UI 绘图优化。设置椭圆的填充颜色时:
- 新颜色存储在 FillColor 属性中
- 计划在您的处理完成后进行重绘。
因此,您修改了三次 FillColor 并为椭圆安排了三次重绘。然后您的代码完成,椭圆最终被重新绘制。
您必须在更改其颜色后调用 ovalShape.Refresh()
以强制重绘该控件。
关于c++ - 使用 Visual C++ 的窗口窗体应用程序中的 Sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836777/