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. }
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. }
执行后先是program类的初始化构造,接着来到main入口点,然后开一个线程执行nonparamterRun。
因为main是静态,所以你构造program不会增加main实例,这里构造program只是为了保证线程调用的nonparamter参数存在而已。你new program不会自动去执行main因为main又不是他的构造,程序运行之所以会去运行main是因为PE文件里的入口点指定。
你可以修改下看看,新线程不要执行main,用Assembly.load去读取你这个程序集,这才是无限去读main
{
Main(args);//递归,瞬间死掉
}每次这种感慨都会让有感慨的人多理解一些东西。自己感悟就好。