c#多线程等待的问题

Breeze 2012-11-12 09:58:29
在主线程(UI线程)中启动了一个worker线程,然后在一定条件下在UI线程中等待worker线结束,现在有这么一个问题,如果只是单纯的等待,不处理消息的话,UI线程显然就会失去对用户操作的响应,因此需要一边等待,一边处理消息,现在不知道该怎么做,该调用那些类函数,哪位有示例代码能否参考一下,多谢了
...全文
289 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaoming01 2012-11-13
  • 打赏
  • 举报
回复
等待就是被动的意思咯。 你让work线程做完工作的时候产生一个事件, 在主线程中响应这个事件,如果要操作控件什么的可以让这个事件的响应部分调用委托实现
bbjiabcd 2012-11-13
  • 打赏
  • 举报
回复
你为啥要在UI线程等待呢?你在worker线程结束的时候回调UI线程的方法不就得了。
Breeze 2012-11-12
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
什么意思,你搞一个消息列表,线程就在后台,循环检测这个列表,如果发现有消息了,就才处理一下,然后通过委托通知主线程做处理
比如我这么调用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#里面是不是也有
bdmh 2012-11-12
  • 打赏
  • 举报
回复
什么意思,你搞一个消息列表,线程就在后台,循环检测这个列表,如果发现有消息了,就才处理一下,然后通过委托通知主线程做处理

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧