登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天道酬勤 玩物丧志

用勇气去改变可以改变的事情,用胸怀去包容无法改变的事情,用智慧去判断两者的区别

 
 
 

日志

 
 

C# 中如何判断线程是否结束  

2011-07-11 21:36:18|  分类: C#文件网络传输 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    为了测试获取网页源码,使用C#编写程序,为了最大限度的增加获取的次数,于是采用了多线程的方式,C#中很容易实现多线程,其实现方式与Java的实现方式基本一样,但是在功能上提供的方法更多一些。
    在编程的过程中,在主线程中启动了多个线程后,往往想等线程结束后再打印一些统计信息出来,但是可能先执行主线程中的打印语句,后面线程才能结束,这往往不是我们想要的。而如何判断线程执行是否结束呢?可喜的是微软提供了我们这样一个方法,IsAlive()其判断线程是否还在运行状态,所以我们可以在循环中一直判断这个标识,等该线程结束后,退出线程。而我们的程序在执行过程中,可能又要判断是否按下了停止按钮或停止键,按下后,会立刻终止线程,退出程序。所以在while循环中还要判断是否有键盘或鼠标消息,所以在循环判断中,还要处理这些消息,防止while(1)循环一直执行,不再响应消息。所以我们使用了几个BOOL变量,作为标志,通过这些标志,可以判断线程是否结束,是否按下了停止按钮。下面是C#中的相关代码,可以参考。
 

   private bool StartThreads()
        {
          
            bool IfTimesEnd = false;  
           
            IfRunOver = false;
         
     
            Thread newThread = new Thread(new ThreadStart(ThreadProc));
            newThread.Start();

            while (!IfRunOver)
                                  
               
                IfTimesEnd = newThread.IsAlive;
                System.Windows.Forms.Application.DoEvents();
                if (!IfTimesEnd || IfRunOver)
                {
                    newThread.Interrupt();
                    newThread.Abort();
                    IfTimesEnd = false;
                    break;
                }
            }
            return !IfTimesEnd; 
          
        }

而主线程中的相关代码为:

                    while (true)
                    {
                        IfTimesEnd = StartThreads();
                        IfThreadOver = IfTimesEnd && true;
                        System.Windows.Forms.Application.DoEvents();

                        if (IfRunOver && IfThreadOver)
                        {
                            pt.Stop();
                            str = "用时:" + pt.Duration + " 秒\n";
                            richTextBox1.ScrollToCaret();
                            richTextBox1.AppendText(str);
                            richTextBox1.Update();
                            break;
                        }
                    }

 

 

  评论这张
 
阅读(4836)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018