对C#中Thread.IsBackground属性的理解
C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释.
.Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。呵呵,这句话读出来好像并不那么好懂.其实,说白了就是当前台线程都结束了的时候,整个程序也就结束了,即使还有后台线程正在运行,此时,所有剩余的后台线程都会被停止且不会完成.但是,只要还有一个前台线程没有结束,那么它将阻止程序结束.这就是为什么有些设计不够完美的WinForm程序,在某种特定的情况下,即使所有的窗口都关闭了,但是在任务管理器的管理列表里仍然可以找到该程序的进程,仍然在消耗着CPU和内存资源.因此,在WinForm程序中,关闭所有窗口前,应该停止所有前台线程,千万不要遗忘了某个前台线程.应用程序进程的存亡由前台线程决定而于后台线程无关.这就是它们的区别.
知道了前后台线程的区别,就应该知道如何声明IsBackgroud属性的值了.
值得说明的一点是:改变线程从前台到后台不会以任何方式改变它在CPU协调程序中的优先级和状态。因为前台后线程与程序进程的优先级无关.
结束前摘录MSDN上一段示例码,以帮助大家便好的理解这一区别:
下面的代码示例对比了前台线程与后台线程的行为。创建一个前台线程和一个后台线程。前台线程使进程保持运行,直到它完成它的 while 循环。前台线程完成后,进程在后台线程完成它的 while 循环之前终止。
using System;
using System.Threading;class Test
{static void Main(){BackgroundTest shortTest = new BackgroundTest(10);Thread foregroundThread = new Thread(new ThreadStart(shortTest.RunLoop));foregroundThread.Name = "ForegroundThread";BackgroundTest longTest = new BackgroundTest(50);Thread backgroundThread = new Thread(new ThreadStart(longTest.RunLoop));backgroundThread.Name = "BackgroundThread";backgroundThread.IsBackground = true;foregroundThread.Start();backgroundThread.Start();}
}class BackgroundTest
{int maxIterations;public BackgroundTest(int maxIterations){this.maxIterations = maxIterations;}public void RunLoop(){String threadName = Thread.CurrentThread.Name;for(int i = 0; i < maxIterations; i++){Console.WriteLine("{0} count: {1}", threadName, i.ToString());Thread.Sleep(250);}Console.WriteLine("{0} finished counting.", threadName);}
}
对C#中Thread.IsBackground属性的理解相关推荐
- 关于Thread.IsBackground属性的理解
C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程.个人感觉这样的解释等于没有解释. .Net中的线程,可以分为后台 ...
- 关于Thread.IsBackground属性的理解(转载)
C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程.个人感觉这样的解释等于没有解释. .Net中的线程,可以分为后台 ...
- C#中Thread.IsBackground 属性
Thread thread.IsBackground =true; //Gets or sets a value indicating whether or not a thread is a ba ...
- css中clear:both属性的理解及用法
css中clear:both属性的作用是清除浮动,设置了浮动就会破坏文档流结构,影响后边的布局,此时在设置清除浮动便可解决这一问题,可以认为,设置了clear:both的当前元素会把前边元素中设有浮动 ...
- 线程的IsBackground属性
.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出:而对于后台 ...
- Thread.Join()方法的理解
关于C#中Thread.Join()的一点理解 今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解. Thread.Join()在MSDN中 ...
- css中文本指什么,CSS中的文本属性
本文总结一下CSS中关于文字的相关属性,最后给出实例. CSS基础文字属性 文字的基础属性主要包括:字体.颜色和文本.除去颜色color的属性外,字体和文本的相关属性可以权威参考: CSS 文本属性( ...
- html 折线边框,HTML中的边框属性
可以通过边框风格属性border-style设定上下左右边框的风格,该属性用于设置一个元素边框的样式,而且必须用于指定可见的边框.可以使用1到4个关键字,如果四个值都给出了,它们分别用于上.右.下和左 ...
- [html] 说说你对HTML5中pattern属性的理解
[html] 说说你对HTML5中pattern属性的理解 好像是判断input在输入时按下tab键跳转到下一个input的优先级 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚 ...
最新文章
- 小学AI教材终于来了,下一步是AI胎教吗?
- php传输html乱码解决
- Silverlight2 边学边练 之三 小球自由落体
- 我喜欢这样的老大[10-24]
- Java的文件流操作
- php中mysqli 处理查询结果集的几个方法
- 【网赚工具】语音转文字神器,无需安装就能使用,支持长语音识别
- Atitit.创业之uke团队规划策划 v9
- Python-ZFJObsLib完美生成iOS垃圾代码
- win 10 右键新建offic失效问题
- 服务器系统补丁失败,windows2008系统更新补丁,以及失败解决方法
- Ubuntu下的快捷键截图
- 洛谷 P3456 [POI2007]GRZ-Ridges and Valleys
- STM32---ADC模数转换详解
- 02.集线器,网桥,交换机
- Siamese Network (应用篇5) :孪生网络用于跟踪 CVPR2016
- 9个不错的PDF搜索引擎
- Unity VR开发教程 OpenXR+XR Interaction Toolkit (三) 转向和移动
- Windows 下Apache服务器搭建
- 下载PHYSICAL REVIEW JOURNALS的TEX模板
热门文章
- Oracle分页查询sql语句
- QtQuick 技巧
- SpringBoot自定义starter时报错:Problems:dependencies.dependency.version‘ for com.zsm.starter:zsm-spring
- Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战
- powershell修改host文件
- 运营总监COO—杨际国的个人介绍【未完待续】
- mysql java自定义函数_Mysql自定义函数总结
- Echarts 饼图总数展示与鼠标hover事件
- 让input框只输入英文
- Java 类的初始化顺序