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

推荐订阅源

T
Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
Recent Commits to openclaw:main
Recent Commits to openclaw:main
WordPress大学
WordPress大学
Webroot Blog
Webroot Blog
Jina AI
Jina AI
H
Hacker News: Front Page
Attack and Defense Labs
Attack and Defense Labs
T
Troy Hunt's Blog
TaoSecurity Blog
TaoSecurity Blog
AI
AI
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Help Net Security
Help Net Security
美团技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 叶小钗
P
Privacy International News Feed
A
Arctic Wolf
IT之家
IT之家
云风的 BLOG
云风的 BLOG
S
Security Affairs
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
博客园 - 司徒正美
Vercel News
Vercel News
C
Cyber Attacks, Cyber Crime and Cyber Security
SecWiki News
SecWiki News
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
N
News and Events Feed by Topic
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
PCI Perspectives
PCI Perspectives
F
Fortinet All Blogs
T
Tenable Blog
Spread Privacy
Spread Privacy
T
The Blog of Author Tim Ferriss
S
Securelist
L
LangChain Blog
Latest news
Latest news
Cloudbric
Cloudbric
博客园 - 三生石上(FineUI控件)

博客园 - 游民一族

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