具有可视C++的窗口窗体应用程序中的 Sleep()

Sleep() in Window Form Application with visual C++

本文关键字:Sleep 应用程序 窗口 可视 C++ 窗体      更新时间:2023-10-16

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

我的窗口窗体有一个面板,其中有 3 个椭圆形,分别名为 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;
}

但是由于某种原因(我不知道),该应用程序无法按我预期的方式工作。椭圆形1只是闪烁,仅此而已。

也许你知道原因!

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

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

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

因此,您修改 FillColor 三次,并计划重新绘制椭圆三次。然后你的代码完成,椭圆形最终被重新绘制。

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