class Program
    {
        public void Method1()
        {
            Console.WriteLine("Method1 is the starting point of excution of the thread");
        }
        static void Main(string[] args)
        {
            Program newclass=new Program();  // this class's name
            Thread Thread1=new Thread(new ThreadStart(newclass.Method1));
            Thread1.Start();
            Console.WriteLine("The excution of Sample Thread has start.");
            Thread1.Abort();
            Console.ReadLine();
        }
    }
为什么执行结果是
the execution of Sample Thread has start
Mehtod1 is the starting point of excution of the threadThread1.Start();在前面啊???? 

解决方案 »

  1.   

    既然令开了个线程,那说明和主线程(Main)是同步运行的,但是CLR并不能确定哪个线程先执行,哪个线程后执行,这是随机的。。
      

  2.   

    Thread1.IsBackground = true;
    加这一句试试
      

  3.   

     class Program
        {
            public void Method1()
            {
                Console.WriteLine("Method1 is the starting point of excution of the thread");
            }
            static void Main(string[] args)
            {
                Program newclass = new Program();  // this class's name
                Thread Thread1 = new Thread(new ThreadStart(newclass.Method1));
                Thread1.IsBackground = true;
                Thread1.Start();
                Console.WriteLine("The excution of Sample Thread has start.");
                //Thread1.Abort();
                Console.ReadLine();
            }
        }这样就是随机的了 
      

  4.   

    谢谢。是随机的,因为是刚学线程。我想知道的是线程的执行顺序是什么,为什么start()后不马上执行?
      

  5.   

    线程执行需要时间去启动的,可以sleep()一段时间
      

  6.   


    将线程改为后台线程这个和线程执行顺序有关系?
    你可以直接用Thread.Sleep()让某一个线程睡眠
      

  7.   

    这个输出应该是随机的,线程的调用是有系统调度完成的,你可以尝试一下改变你线程的优先级试试
    还有你如果最近在学线程相关的知识,建议看一下<<C#线程手册>>,很不错的一本书加油
      

  8.   

    楼主,你这个实例过于简单,而且也没有任何耗时的操作,在这种情况下很难去测试线程的一些特性,再加上线程本来就有许多的不确定行,所以你这样测试的话有一些效果出不来,你可以尝试将程序做得稍微复杂一些,,例如再加一个方法Method2,或者加Sleep,这样才能体现出线程的特性.就拿你写的代码说,优先级高的一定会先执行么,从原理上说是,但是从你的程序运行的结果来看就不一定了.是为你的程序线程执行的时间很短还有一个你可以尝试一下主线程和子线程分别输出1-100的数字,,这样每次输出的结果也会不太一样.加油..
      

  9.   

    按照结果推的话应该是时间片1 (主线程占据)
    Thread1.start();//标识Thread1的线程启动,实际尚未开始工作,因为操作系统还没把CPU时间交给它
    Console.WriteLine("The excution of Sample Thread has start.");//主线程时间片未释放继续运行

    时间片1结束时间片2(Thread1占据)
    Method1();//轮到Thread1使用CPU时间因为每次分得的时间片大小一致,所有时间上能完成语句行数也一致,所以结果一致使用了线程就不能按照代码顺序判断执行的先后了