【发布时间】:2016-05-25 07:30:42
【问题描述】:
我在 Visual Studio 中使用 C++、Windows 窗体应用程序工作。我尝试将按钮涂成红色,等待 3 秒,然后将其涂成蓝色。
button1->BackColor = System::Drawing::Color::DarkRed;
Sleep(3000);
button1->BackColor = System::Drawing::Color::CornflowerBlue;
但是,Sleep() 函数在第一行之前执行(涂成红色)。程序从等待 3 秒开始,经过一段时间后,它会将按钮涂成蓝色。似乎画红色的代码没有时间执行。单独地,画红色效果很好。 我也尝试过其他延迟解决方案。示例:
int wait = clock() + 2 * CLOCKS_PER_SEC;
while (clock() < wait) {}
这似乎是 Visual Studio C++ 中的一个问题,因为 Sleep() 函数在 Code::Blocks 控制台脚本中运行良好。你有什么解决办法吗?
【问题讨论】:
-
我假设您正在让主线程进入睡眠状态,因此它没有时间将背景颜色更新为红色。
-
休眠功能停止程序执行一段时间。在您的情况下,它发生在绘图调用之前。您需要使用在每次绘制调用后运行的更新函数
-
按钮需要被强制重绘——默认情况下,出于性能原因,它不会立即这样做,并且调用
Sleep()会在此之前暂停线程。如果您使用的是 .NET - 您还没有说清楚 - 请尝试在调用Sleep()之前添加button1->Refresh()。
标签: c++ visual-studio