在主线程(UI线程)中启动了一个worker线程,然后在一定条件下在UI线程中等待worker线结束,现在有这么一个问题,如果只是单纯的等待,不处理消息的话,UI线程显然就会失去对用户操作的响应,因此需要一边等待,一边处理消息,现在不知道该怎么做,该调用那些类函数,哪位有示例代码能否参考一下,多谢了
解决方案 »
- c# 字符串转化成字节
- 在窗体中画一个矩形框
- AdoNet.DataRow与System.Data.DataRow有什么区别?
- 帮顶给分,¥¥¥¥现金(人民币)¥¥¥¥¥,求解决之道!(问题内详)
- winform checkedlistbox的问题?
- Windows Form中的TreeView控件,如果让一个没有孩子节点的TreeNode前面显示"+"号而不是"-"号
- 在GDI+的bitmap生成图片后...
- c#无法连接SQL数据库,求高手指点
- SeverSQL实现日记记录中使用触发器的问题
- 大家在处理程序的时候是如何将【异常】进行高效处理的。
- 握手协议的理解
- 如何用C#开发桌面提醒程序?
比如我这么调用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#里面是不是也有
你让work线程做完工作的时候产生一个事件,
在主线程中响应这个事件,如果要操作控件什么的可以让这个事件的响应部分调用委托实现