我的进度条并不是全部重画,WINAPI

我的进度条并不是全部重画,WINAPI,winapi,progress-bar,Winapi,Progress Bar,在我的应用程序中,我进入了一个未知数量元素的循环, 所以我显示了一个进度条,通知应用程序正在运行 此代码工作正常,程序条独立刷新: do { ... SendMessage(hPBLoading, PBM_STEPIT, 0, 0); ... } while(true); 但不幸的是,窗口的其余部分没有刷新(由于循环,这一点很明显) 在Windows 7中,几秒钟后Windows会将我的应用程序视为崩溃,然后在循环结束

在我的应用程序中,我进入了一个未知数量元素的循环, 所以我显示了一个进度条,通知应用程序正在运行

此代码工作正常,程序条独立刷新:

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计数后更新和刷新,因此它永远不会崩溃, 但不幸的是,出现了另一个问题,现在进度条没有完全重新绘制-斜面框架在几秒钟后消失,请检查下图:

谢谢你的帮助!
m、

似乎您正在使用GUI线程来执行一些长任务。这不是一个好的做法。当您想要执行长任务时,请使用辅助线程,并让GUI线程在辅助线程工作时处理GUI。您需要做一些额外的工作来处理两个线程之间的同步(如果GUI关闭,请停止工作线程,避免在当前任务结束之前启动任务等等),但这就是它的工作方式。

似乎您正在使用GUI线程来执行一些长任务。这不是一个好的做法。当您想要执行长任务时,请使用辅助线程,并让GUI线程在辅助线程工作时处理GUI。您需要做一些额外的工作来处理两个线程之间的同步(如果GUI关闭,请停止工作线程,避免在当前任务结束之前启动任务,等等),但这就是它的工作方式。

谢谢,我希望我可以避免这个额外的线程,但似乎我需要处理它。也许是一些代码示例?我需要创建一个简单的线程还是一些特定的东西?我会根据我的编码环境创建线程-
CreateThread
在纯Win32中,
\u beginthreadex
在C/C++,
AfxBeginThread
CWinThread
在MFC中等等。在简单的应用程序中,同步并不是什么大问题,而且它需要的知识是好的,无论如何,所以如果你不熟悉这种工作-利用机会!谢谢,我刚刚添加完工作线程,它简单高效,运行良好…谢谢,我希望我可以避免这个额外的线程,但似乎我需要处理它。也许是一些代码示例?我需要创建一个简单的线程还是一些特定的东西?我会根据我的编码环境创建线程-
CreateThread
在纯Win32中,
\u beginthreadex
在C/C++,
AfxBeginThread
CWinThread
在MFC中等等。在简单的应用程序中,同步并不是什么大问题,而且它需要的知识是好的,无论如何,所以如果你不熟悉这种工作-利用机会!谢谢,我刚刚添加完工作线程,它简单高效,运行良好…你发明了可怕的DoEvents()。将PM_QS_油漆传递给PeekMessage以限制损坏。谢谢,我也将检查此溶液…你发明了可怕的DoEvents()。将PM_QS_油漆交给PeekMessage以限制损坏。谢谢,我也会检查此溶液。。。