static Thread sleeper;static void Main(String[] args)
{
   Console.Write("Enter");
   sleeper=new Thread(new ThreadStart(SleepingThread));
   sleeper.Start();
   Console.Write("Exit");
   Console.Read();
}static void SleepingThread()
{
   for(int i=1;i<50;i++)
   {
      Console.Write(i+" ");
      if(i==10 || i==20 || i==30)
      {
         Console.WriteLine("Going to sleep at:"+i);
         Thread.Sleep(20);
      }
   }
}问题1:
线程在函数里的执行顺序是怎样的?
比如上面的代码:在Main里面是先执行Console.Write("Enter");Console.Write("Exit");后执行sleeper.Start();还是依次执行Console.Write("Enter");sleeper.Start();Console.Write("Exit");
这一点比较重要,请大虾们能详细介绍一下
问题2:
执行调试的结果为:
Enter
Exit
1 2 3 4 5 6 7 8 9 10 Going to sleep at:10
11 12 13 14 15 16 17 18 19 20 Going to sleep at:20
21 22 23 24 25 26 27 28 29 30 Going to sleep at:30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
执行运行的结果为:
Enter
1 2 3 4 Exit
 5 6 7 8 9 10 Going to sleep at:10
11 12 13 14 15 16 17 18 19 20 Going to sleep at:20
21 22 23 24 25 26 27 28 29 30 Going to sleep at:30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
为什么两次的结果会不一样?哪一个是准确的?

解决方案 »

  1.   

    都正确
    sleeper.Start();
       Console.Write("Exit");
    这两句基本是同时运行的,看哪个先执行了先打印的哪个,不能确定.顺序是你的机子性能决定的
      

  2.   

    开线程就是cpu的时间片轮转,先运行哪句是都有可能的
      

  3.   

    谢谢
    C#里的调试和运行应该是有区别的,但区别在哪里我还不太了解
    是不是sleeper.Start()运行后,主函数就不管了
    也就是说就算主函数执行完了,线程是不是一样还在执行,而不受主函数的控制了?