游民家园

leafyoung v.s. dotnet

导航

C#线程:只要任何一个线程在运行,程序就不退出?!

第一次使用线程相关的东西就遇到一个很“奇怪”的问题,明明程序(或者说主线程)已经结束了,但是整个程序就是不退出,赖在进程列表里面!因为以前从来没遇到这个问题,而这个程序是我首次使用线程(土了点,呵呵),问题肯定是出在这里了,因此写了一个控制台程序进行验证,代码如下:
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Net;
 5 using System.Net.Sockets;
 6 using System.Threading;
 7 
 8 namespace Test
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             Thread testThread = new Thread(new ThreadStart(Program.TestThread));
15             testThread.Name = "testThread";
16             testThread.Start();
17         }
18 
19         static void TestThread()
20         {
21             while (true)
22             {
23                 Thread.Sleep(0);
24             }
25         }
26     }
27 }
28 

运行上面这个例子,由于线程testThread是个死循环,所以这个线程是不会退出的。但是我的期望是主线程一旦结束,就意味着程序要退出了,那么那些辅助线程应该自动被结束才是。但显然从上面的实验代码运行结果可以看出:只要存在任何一个活动线程,那么进程就持续运行!

要解决这个问题也非常简单,在Main函数的结尾添加一行:
1 testThread.Abort();

那么就一切正常了,不过感觉有点多此一举,而且不明白为什么这么设计,系统完全可以自动帮我们这么做了嘛,难道有什么难以预料的不良后果么???

// update
纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出

posted on 2007-03-25 12:28  游民一族  阅读(9733)  评论(36编辑  收藏  举报