1. 在你的线程方法中,return 前去加个标志
2. 不想再每个方法后面加,就创建一个基类通过判断线程状态来获得线程方法的状态是个极度不靠谱的方法。

解决方案 »

  1.   

    给你一个例子,自己去扩展. static void Main(string[] args)
            {
                //定义同步事件
                AutoResetEvent[] events = 
                {
                    new AutoResetEvent(false),
                    new AutoResetEvent(false),
                    new AutoResetEvent(false),
                    new AutoResetEvent(false)
                };            Action notify = delegate
                {
                   //通知,等待全部完成才输出信息
                    if (WaitHandle.WaitAll(events, 0))
                    {
                        Console.WriteLine("All threads finished");
                    }
                };            //线程,把你的处理代码放在这里
                WaitCallback wcb = (status) =>
                {
                    //to do, you time cost codes
                    Random r = new Random((int)DateTime.Now.Ticks);
                    Thread.Sleep(r.Next(100,1000));
                    Console.WriteLine("Thread finished");
                    //Event置位,表明处理完成
                    AutoResetEvent are = status as AutoResetEvent;
                    are.Set();
                    //通知
                    notify();
                };
          
                //放入线程池,每个Thread关联一个AutoResetEvent
                foreach (AutoResetEvent are in events)
                {
                    ThreadPool.QueueUserWorkItem(wcb, are);
                }
            }
      

  2.   

    使用backgroundworker这个控件可以监控到你想要的结果,
    做到捕获所有子线程已经结束了。然后。再执行下面报Msg   当然这里你并不要另外再开线程,用while对条件进行限制就可以达到你要的效果
       随手写了个你看一下
       using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace MyNewsReader.UI
    {
        public partial class Form1 : Form
        {
            BackgroundWorker worker = new BackgroundWorker();
            public Form1()
            {
                InitializeComponent();
                worker.DoWork += new DoWorkEventHandler(worker_DoWork);//后台线程开始
                worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//后台线程结束
            }        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                MessageBox.Show("线程结束");
            }        void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                //执行你要执行的内容
                DowWorkTest();
            }        private void DowWorkTest()
            {
                //这里你可以写你想要做的效果 
                int i = 0;
                while (i < 100)
                {
                    i++;
                }
            }
        }
    }
       
      

  3.   

    异步多线程 委托backgroundworker