20分贴有点不好意思,挥霍过度快没分了。下面是我在某处看到的一段示范代码,不理解怎么可以在Promgram.Main()里面又new 一个Program类,这样的话岂不是有两个入口点函数,并且循环执行下去.当然事实上并不会出现,why?
6.     namespace StartThread  
7.     {  
8.         class Program  
9.         {  
10.             int interval = 200;  
11.             static void Main(string[] args)  
12.             {  
13.                 Program p = new Program();  
14.                 Thread nonParameterThread = new Thread(new ThreadStart(p.NonParameterRun));  
15.                 nonParameterThread.Start();  
16.             }  
17.             /// <summary>  
18.             /// 不带参数的启动方法  
19.             /// </summary>  
20.             public void NonParameterRun()  
21.             {  
22.                 for (int i = 0; i < 10; i++)  
23.                 {  
24.                     Console.WriteLine("系统当前时间毫秒值:"+DateTime.Now.Millisecond.ToString());  
25.                     Thread.Sleep(interval);//让线程暂停  
26.                 }  
27.         }  
28.     }  

解决方案 »

  1.   

    Main是一个static的方法,属于类,不属于实例
      

  2.   

    一个main,一个nonparamterRun,
    执行后先是program类的初始化构造,接着来到main入口点,然后开一个线程执行nonparamterRun。
    因为main是静态,所以你构造program不会增加main实例,这里构造program只是为了保证线程调用的nonparamter参数存在而已。你new program不会自动去执行main因为main又不是他的构造,程序运行之所以会去运行main是因为PE文件里的入口点指定。
    你可以修改下看看,新线程不要执行main,用Assembly.load去读取你这个程序集,这才是无限去读main
      

  3.   

    Main是程序的入口函数,仅此而已。没限制不能调用。你当然可以自己调用。static void Main(string[] args)
    {
        Main(args);//递归,瞬间死掉
    }每次这种感慨都会让有感慨的人多理解一些东西。自己感悟就好。