在主线程(UI线程)中启动了一个worker线程,然后在一定条件下在UI线程中等待worker线结束,现在有这么一个问题,如果只是单纯的等待,不处理消息的话,UI线程显然就会失去对用户操作的响应,因此需要一边等待,一边处理消息,现在不知道该怎么做,该调用那些类函数,哪位有示例代码能否参考一下,多谢了

解决方案 »

  1.   

    http://www.cnblogs.com/vic_lu/archive/2011/03/30/1999840.html
      

  2.   


    比如我这么调用WaitForSingleObject(hHandle,1000), 这是一个阻塞函数,UI线程就会失去相应,我必须这么调用while (TRUE)

       dwResult=::MsgWaitForMultipleObjects(1, &Thread_Name->m_hThread, FALSE, 500, QS_ALLEVENTS);

       if(dwResult==WAIT_OBJECT_0)
       {
    break;
       }
       else if(dwResult==WAIT_TIMEOUT)
       {
            /*AfxMessageBox("等待线程结束超时!", MB_OK|MB_ICONERROR);*/
    break;
        }
        else
       {
            MSG msg;
         
            while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
           {
       ::TranslateMessage(&msg);
       ::DispatchMessage(&msg);
            }
        }
    }
    我记得vb里面有个doevents实现类似的功能,不知道c#里面是不是也有
      

  3.   

    你为啥要在UI线程等待呢?你在worker线程结束的时候回调UI线程的方法不就得了。
      

  4.   

    等待就是被动的意思咯。
    你让work线程做完工作的时候产生一个事件,
    在主线程中响应这个事件,如果要操作控件什么的可以让这个事件的响应部分调用委托实现