使用AfxBeginThread显示一个UI来表示传输文件的进度。
伪代码为:
Button1_Clicked()
{
  p=AfxBeginThread(包含UI的CWindThread类);
  for(int i=0;i<100;i++)
  {
     Sleep(100);
     p->PostThreadMessageW(WM_我的消息,0,i);//i用于设置UI的进度条的pos
  }
}另一个类中的响应方法
WM_我的消息响应方法(..,i)
{
  m_我的UI.m_progress.setpos(i);
}
问题是,在进行Sleep的循环内,一直阻塞了进程,用来显示进度的UI一直就没有显示,等循环完了才显示出来。应该怎么做才可以达到我的效果呢?

解决方案 »

  1.   

    Button1_Clicked()这明显是一个系统消息的处理
    你这个函数要即可返回,才能有界面绘制你在这里for 100 * 100, 界面当然不刷了在这个函数里设一个定时器,用定时器来发p->PostThreadMessageW(WM_我的消息,0,i);//i用于设置UI的进度条的pos吧
      

  2.   

    其实如果你的WM消息,完全没有必要,直接UI.m_progress.setpos(i);完了,这个操作是瞬时的,没必要开线程,给自己找事
      

  3.   

    是我的错误,不应该使用UI线程。使用Worker线程就可以了,