在我的应用程序中我正在进入一个包含未知数量元素的循环, 所以我正在显示一个进度条来通知该应用程序正在运行,
这个代码工作FINE,progres bar独立令人耳目一新:
do
{
...
SendMessage(hPBLoading, PBM_STEPIT, 0, 0);
...
} while(true);
但不幸的是窗口的其余部分没有刷新(由于循环这很明显) 几秒钟后,在Windows 7中,Windows将我的应用视为分解,并在结束循环后返回并刷新,
所以我发现我需要调度消息队列并将代码更改为:
do
{
...
SendMessage(hPBLoading, PBM_STEPIT, 0, 0);
...
us_tmpBreakCounter++;
...
if (us_tmpBreakCounter >= 10)
{
us_tmpBreakCounter = 0;
UpdateSomeOtherElementsinWindow();
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
} while(true);
它工作正常,应用程序更新并在ex之后刷新。 10个计数因此它永远不会崩溃, 但不幸的是发生了另一个问题,现在PROGRESS BAR没有完全重绘 - 几秒钟后斜面框架消失,请查看下图:
http://mstanisz.website.pl/temp/progressbar_01.jpg
感谢您的帮助! 米。
答案 0 :(得分:3)
好像你正在使用GUI线程做一些长期任务。那不是一个好习惯。当您想要执行长任务时,请使用工作线程,并让GUI线程在工作程序工作时处理GUI。您将需要做一些额外的工作来处理两个线程之间的同步(如果GUI关闭则停止工作,避免在当前任务结束之前启动任务等等),但这就是它的工作方式。 / p>