C#线程:只要任何一个线程在运行,程序就不退出?!
第一次使用线程相关的东西就遇到一个很“奇怪”的问题,明明程序(或者说主线程)已经结束了,但是整个程序就是不退出,赖在进程列表里面!因为以前从来没遇到这个问题,而这个程序是我首次使用线程(土了点,呵呵),问题肯定是出在这里了,因此写了一个控制台程序进行验证,代码如下:
运行上面这个例子,由于线程testThread是个死循环,所以这个线程是不会退出的。但是我的期望是主线程一旦结束,就意味着程序要退出了,那么那些辅助线程应该自动被结束才是。但显然从上面的实验代码运行结果可以看出:只要存在任何一个活动线程,那么进程就持续运行!
要解决这个问题也非常简单,在Main函数的结尾添加一行:
那么就一切正常了,不过感觉有点多此一举,而且不明白为什么这么设计,系统完全可以自动帮我们这么做了嘛,难道有什么难以预料的不良后果么???
// update
纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出
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
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
纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步