IsBackground
C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。
在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性。两者在表现形式上的唯一区别是:当前台线程都结束了的时候,整个程序进程也就结束了,即使还有后台线程正在运行,此时,所有剩余的后台线程都 会被停止且不会完成.但是,只要还有一个前台线程没有结束,那么它将阻止程序结束.这就是为什么有些设计不够完美的WinForm程序,在某种特定的情况 下,即使所有的窗口都关闭了,但是在任务管理器的管理列表里仍然可以找到该程序的进程,仍然在消耗着CPU和内存资源.因此,在WinForm程序中,关 闭所有窗口前,应该停止所有前台线程,千万不要遗忘了某个前台线程.应用程序进程的存亡由前台线程决定而于后台线程无关.这就是它们的区别.
用Thread创建的线程默认是前台线程,也就是IsBackground属性默认是false。但我们要注意线程池中的线程默认都是后台线程。
值得说明的一点是:改变线程从前台到后台不会以任何方式改变它在CPU协调程序中的优先级和状态。因为前台后线程与程序进程的优先级无关.
class Program
{
static void Main()
{
TestBackGroud shortT = new TestBackGroud(10);
Thread frontThread = new Thread(new ThreadStart(shortT.PrintValue));
frontThread.Name = "frontThread";
TestBackGroud longT = new TestBackGroud(50);
Thread backGroudThread = new Thread(new ThreadStart(longT.PrintValue));
backGroudThread.Name = "backGroudThread";
backGroudThread.IsBackground = true;//為true時為後臺線程,isBackground默認為false,
frontThread.Start();
backGroudThread.Start();
}
}
public class TestBackGroud
{
private int _maxCount;
public int _MaxCount
{
get{return _maxCount;}
set{_maxCount=value;}
}
public TestBackGroud(int count)
{
this._maxCount = count;
}
public void PrintValue()
{
for (int i = 0; i < _MaxCount; i++)
{
Console.WriteLine("{0} is count {1}", Thread.CurrentThread.Name, i.ToString());
Thread.Sleep(250);
}
Console.WriteLine("{0} is over", Thread.CurrentThread.Name);
}
}
运行效果:当frontThread结束后,执行窗口自动关闭退出,backGroudThread也将终止(实际并未执行完)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28699126/viewspace-756614/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28699126/viewspace-756614/
IsBackground相关推荐
- C#中Thread.IsBackground 属性
Thread thread.IsBackground =true; //Gets or sets a value indicating whether or not a thread is a ba ...
- 线程的IsBackground属性
.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出:而对于后台 ...
- Thread.IsBackground
解释: 获取或设置一个值,该值指示某个线程是否为后台线程. 后台线程不会防止应用程序的进程被终止掉. 注意: 主线程中创建了一个线程,线程的IsBackground默认是设置为FALSE的. 主线程退 ...
- 编写高质量代码改善C#程序的157个建议——建议74:警惕线程的IsBackground
建议74:警惕线程的IsBackground 在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性.两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就 ...
- 【C#】后台线程IsBackground
简单点来说: C#中的线程分前台线程和后台线程. 1 前台线程的问题及与后台线程的区别 对于前台线程来说,如果这些线程不退出,则主线程无法退出,则整个进程也无法退出.会造成即使界面窗口关掉了,但是进程 ...
- unity和C#的多线程 Thread的IsBackground属性,详解
Thread的IsBackground = true;//主程序结束后,线程随之结束 [日常要用到的] Thread的IsBackground = false;//主程序结束后,线程不会随之结束 案例 ...
- 建议74:警惕线程的IsBackground
建议74:警惕线程的IsBackground 在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性.两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就 ...
- C# IsBackground作用
https://blog.csdn.net/snakorse/article/details/43888847 要点: 1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为 ...
- Thread 设置 IsBackground true false 的 运行差别
1.这是一个 后台线程,IsBackground=true, 主线程完成后,后台子线程也停止了,即使 子线程 还有没运行完,也要停止 class Program{static void Main(s ...
最新文章
- 转:[大数据竞赛]协同过滤在这个问题上是否work
- 巧用Linux 架设TFTP Server备份路由器的配置文件
- oracle的函数索引怎么建,如何创建oracle函数索引
- Delphi 关键字详解
- [云炬创业学笔记]第二章决定成为创业者测试12
- Oracle 原理:复杂的SQL语句
- Python入门学习笔记08(random模块)
- bzoj1699[Usaco2007 Jan]Balanced Lineup排队
- vector java 复制_面试官:关于Java性能优化,你有什么技巧
- 微软全面拥抱 AI!
- Python之路(第十四篇)os模块
- Java实现的各种排序算法
- Google Chrome抓包分析详解
- 【BSP视频教程】STM32H7视频教程第14期:超干●货,MPU和Cache实战,一张图了解所有经典配置案例,争取人人都可以玩溜(2022-05-08)
- Arturia V Collection 9 for mac - Arturia系列合成器合集
- 迪杰斯特拉算法(dijkstra)_朴素版_堆优化版
- 洛谷 P8584 探索未知 题解
- 【VUE】图片预览放大缩小插件(推荐阅读)
- Android - ProGuard简介
- 推荐几款免费视频格式转换软件,比格式工厂更好用
热门文章
- java实现求解汉诺塔问题(提示, 使用递归)
- hadoop fs -ls后出现No such file or directory解决
- 趣味学python(018)
- 【KBQA综述-0】Complex Knowledge Base Question Answering: A Survey
- 放假啦!祝祖国母亲生日快乐!
- [Java] 继承和多态
- Eclipse安装记录
- 英语计算机测评,一种英语翻译结合计算机测评录入平台的制作方法
- vue+elementui实现可编辑表格
- Windows server 2008 FTP 防火墙设置