代码:
运行结果:
http://hi.csdn.net/attachment/201110/12/10173500_1318394222qFR5.jpg那个辅助线程不是包含在主线程里吗?为什么不等辅助线程结束,主线程就结束了呢???

解决方案 »

  1.   

    你先让主线程Sleep后再th.start().
      

  2.   

    这才叫做多线程啊!!  如果想让辅助线程结束后在结束主线程,可以使用锁
    ManualResetEvent eventWait = new ManualResetEvent(false)
      

  3.   


    public class EventWaitTest
        {
            private string name; //顾客姓名
            //private static AutoResetEvent eventWait = new AutoResetEvent(false);
            private static ManualResetEvent eventWait = new ManualResetEvent(false);
            private static ManualResetEvent eventOver = new ManualResetEvent(false);        public EventWaitTest(string name)
            {
                this.name = name;
            }        public static void Product()
            {
                Console.WriteLine("服务员:厨师在做菜呢,两位稍等");
                Thread.Sleep(2000);
                Console.WriteLine("服务员:宫爆鸡丁好了");
                eventWait.Set();
                while (true)
                {
                    if (eventOver.WaitOne(1000, false))
                    {
                        Console.WriteLine("服务员:两位请买单");
                        eventOver.Reset();
                    }
                }
            }        public void Consume()
            {
                while (true)
                {
                    if (eventWait.WaitOne(1000, false))
                    {
                        Console.WriteLine(this.name + ":开始吃宫爆鸡丁");
                        Thread.Sleep(2000);
                        Console.WriteLine(this.name + ":宫爆鸡丁吃光了");
                        eventWait.Reset();
                        eventOver.Set();
                        break;
                    }
                    else
                    {
                        Console.WriteLine(this.name + ":等着上菜无聊先玩会手机游戏");
                    }
                }
            }
        }    public class App
        {
            public static void Main(string[] args)
            {
                EventWaitTest zhangsan = new EventWaitTest("张三");
                EventWaitTest lisi = new EventWaitTest("李四");            Thread t1 = new Thread(new ThreadStart(zhangsan.Consume));
                Thread t2 = new Thread(new ThreadStart(lisi.Consume));
                Thread t3 = new Thread(new ThreadStart(EventWaitTest.Product));            t1.Start();
                t2.Start();
                t3.Start();            Console.Read();          
            }
        }
    http://www.cnblogs.com/freshman0216/archive/2008/07/30/1252345.html
      

  4.   

    th.Start()后辅助线程开始运行,但是主线程执行的比较快,先输出了“主线程结束”,与此同时辅助线程也运行着。 两个线程是宏观并行的。
      

  5.   

    执行结果不确定。主线程和辅助线程都是cpu调度的对象,调度到谁,谁执行  当然99.99%的可能是主线程执行完,辅助线程随之生命周期结束而结束。
      

  6.   

    做个比方 父线程要做某件事用时100秒
    父线程在第5秒造了子线程,然后 子线程也开始工作(他不造子线程),他要做某件事用时150秒当父线程工作完毕的时候 子线程还在工作 
    但是你的父线程工作完后,就结束了,你看到的就是 子线程的结果还没显示,你的可爱的神秘的黑色小窗口就关闭了....你想要得到结果 那么就让父线程工作完后等上一段时间 Thread.Sleep(N秒钟);这N秒时间内要让子线程完成..那么你就会看见子线程的结果了
      

  7.   

    6楼 8楼纯粹扯淡,你的主线程,只要你的应用程序不关闭,就不会结束掉!
    你可以做一个WINFROM应用程序测试一下如果你的主线程休眠,你看看你还能做什么操作么?
    这样你就能稍微理解UI线程到底是干什么的了,
    你子线程开启了,主线程执行,子线程也在执行,主线程执行完毕,等待继续操作,注意这个时候主线程并没有休眠和关闭,而是在监视你的下一步操作,假如你没有可能进行下一步操作才会进行关闭
    例如你的程序如果没有READLINE的话,他就会关闭,主线程关闭后,依赖他所有的资源都会被释放,子线程必然也会被关闭
      

  8.   

        class Program
        {
            object obj = new object();
            static void Main(string[] args)
            {
                
                Console.WriteLine("主线程开始....");
                MyThread myTread = new MyThread();
                    Thread th = new Thread(myTread.TheTask);
                    th.Start();
                    Thread.Sleep(1000);
                Console.WriteLine("主线程结束");
                Console.ReadLine();
            }
        }
        class MyThread {
            public void TheTask() {
                Console.WriteLine("辅线程开始");
                for (int i = 0; i < 10;i++ ) {
                    //Thread.Sleep(500);
                    Console.WriteLine(i);
                }
                Console.WriteLine("辅线程结束");
            }
        }
    你这样改后,你运行看就明白什么原因了,哈哈,很简单~~~