CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

当前线程A创建另一个线程B后,怎样让线程A等待直到线程B完成?

楼主xueyhfeng(小峰)2005-07-27 19:49:13 在 .NET技术 / C# 提问

这种问题可以用多线程实现么?  
   
  我做了一个winform的程序,有一些比较费时间的操作,执行这些操作时程序就如死了一般长时间不响应了,  
   
  为了解决这个问题,我就在main()中创建另一个线程来执行这个操作,但是下一步操作需要这个线程运行的结果,也就是主线程需要等待,使用了Thread.Join(),但是一调用,程序就又“不响应”了,  
   
  怎样才能运行这个比较费时操作的时候,使程序不至于“死掉”?,而且那个那个费时间的操作需要循环执行多次,  
   
  问题点数:100、回复次数:15Top

1 楼xueyhfeng(小峰)回复于 2005-07-27 20:17:50 得分 0

也就是,主线程被阻塞了,怎么办?Top

2 楼bin_ston(╅不解的风┾)回复于 2005-07-27 20:30:03 得分 5

曾经加了一个记时器解决这个问题Top

3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-07-27 21:52:19 得分 5

不要阻塞主线程,换别的方法Top

4 楼yizhixiaozhu(天啦,手都起茧了)回复于 2005-07-27 22:08:10 得分 5

不要阻塞线程  
  试试sleep()  
  或者干脆将suspend()  
  然后等B结束后  
  再将A   resume();Top

5 楼ivorstar(单击此处留言)回复于 2005-07-27 22:11:14 得分 5

不要阻塞主线程,把下一步的操作也单独开一个线程,然后阻塞这个线程Top

6 楼yjinter(在在)回复于 2005-07-27 22:11:33 得分 5

提个思路:在B线程中产生个消息,在A中触发一个事件Top

7 楼yjinter(在在)回复于 2005-07-27 22:16:54 得分 0

然后在这个事件中接下去处理没完成的事情。Top

8 楼resp(百无禁忌)回复于 2005-08-08 10:55:16 得分 5

调用的时候lock一下喽Top

9 楼linuxyf(率人哥哥)回复于 2005-08-10 15:45:44 得分 5

用异步委托实现Top

10 楼Flashcom(虫虫)回复于 2005-08-10 15:50:55 得分 5

在执行耗时线程开始时把主窗口所有可以操作的按钮等什么的Enable属性都设为false,等线程执行完后才把相应的控件的Enable属性变回true,这样既不阻塞主线程也不能执行下一步!!Top

11 楼weisunding(鼎鼎)回复于 2005-08-10 15:51:58 得分 50

楼主,看我的。  
  public   bool   bFinished   =   false;   //定义全局变量  
   
  void   Main()  
  {  
  bFinished   =   false;  
  Thread   thA   =   new   ThreadStart(new   ThreadStart(thProc));  
  thA.Start();  
   
  while(!bFinished)  
  {  
  //开始同步等待直到线程thA执行完  
  Application.DoEvents();  
  }  
   
  }  
   
  void   thProc()  
  {  
  //执行n多代码  
   
  bFinished   =   true;   //这里要看!!!!!  
  }  
  Top

12 楼weisunding(鼎鼎)回复于 2005-08-10 15:53:50 得分 0

为了不过多占用CPU,可以在   在   while里面加入     ..Sleep(100);Top

13 楼dafeifei(大飞飞)回复于 2005-08-10 16:12:15 得分 5

用这个信号量,专门用来线程同步的;  
  System.Threading.Manu***   (竟然记不得了,中文意思是(手动XX),不过在vs中,敲开头就出来了)  
  这个类。  
  先准备一下,调用reset()方法。  
   
  主线程中调用waitone()方法就是使主线程阻塞。  
  在另一个线程中调用它的set()方法,就让刚才阻塞的线程继续。你可以在顺利接受到参数后调用他继续。Top

14 楼ybzsu(弑君者)回复于 2005-08-10 16:30:23 得分 5

把下一步定义成一个事件,用回调函数激发事件Top

15 楼ybzsu(弑君者)回复于 2005-08-10 16:34:37 得分 0

while应该和join()一样把,在while的时候主线程照样忙于做while的事,没机会去处理别的事Top

相关问题

  • 创建线程!!!
  • 创建线程
  • 用CreateThread(...)创建线程...?
  • 如何创建多线程
  • 创建线程问题。
  • 线程问题:线程A建立线程B,由A如何把B终止?
  • 请问创建线程时,怎样给线程传递参数??
  • 一个在主线程中的子线程能否在线程函数中创建自己的子线程呢?
  • 在vc中动态创建线程
  • 在多线程中如何创建CSOCKET???

关键词

  • 线程
  • 执行
  • 阻塞
  • 调用
  • 主线程
  • bfinished
  • 操作
  • tha
  • 下一步
  • 等待

得分解答快速导航

  • 帖主:xueyhfeng
  • bin_ston
  • oyljerry
  • yizhixiaozhu
  • ivorstar
  • yjinter
  • resp
  • linuxyf
  • Flashcom
  • weisunding
  • dafeifei
  • ybzsu

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo