惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
B
Blog
腾讯CDC
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - Franky
罗磊的独立博客
月光博客
月光博客
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
V
Visual Studio Blog
I
InfoQ
有赞技术团队
有赞技术团队
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale

博客园 - 游民一族

VR发展的最大障碍在于内容? 无法修改Form尺寸的解决方法 [ATL/ActiveX]全屏显示ActiveX控件 近期业余生活以及计划(持续更新) 远程控制之屏幕截取 小结 [C#]mouse_event模拟点击时坐标参数无效?! Javascript: IE中命名函数直接量的Bug? - 游民一族 - 博客园 ASP.NET AJAX Client Library: 更繁?更简? ASP.NET动态创建控件之绝境求生 喜讯,公司换宽屏液晶显示器了 分享:基于UDP协议实现可靠的数据传输 基于Web的仿WF工作流设计器 [ASP.NET]ASP.NET 2.0中Membership的UserID问题 [ASP.NET AJAX]谨记给UpdatePanel中动态添加的控件赋ID VS 2005 BUG: 新增JScript文件编码问题引起乱码? [ASP.NET]如何灵活定制皮肤/页面:布局设计器介绍 过滤ASP.NET输出HTML中的无用空格 在JavaScript中实现命名空间 [C#]NHibernate处理多帐套问题
C#线程:只要任何一个线程在运行,程序就不退出?!
游民一族 · 2007-03-25 · via 博客园 - 游民一族

第一次使用线程相关的东西就遇到一个很“奇怪”的问题,明明程序(或者说主线程)已经结束了,但是整个程序就是不退出,赖在进程列表里面!因为以前从来没遇到这个问题,而这个程序是我首次使用线程(土了点,呵呵),问题肯定是出在这里了,因此写了一个控制台程序进行验证,代码如下:

 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
纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出