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);}
}


IsBackground对线程的重要作用

要点:

1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。

2、当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。

3、只有IsBackground=TRUE的线程才会随着主线程的退出而退出。

4、当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。

5、原理:只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。

文章出处:

http://blog.csdn.net/deandingding/article/details/39761125

http://www.cnblogs.com/Billy-rao/archive/2011/03/16/1986300.html

转载于:https://www.cnblogs.com/purplefox2008/p/6089208.html

关于Thread.IsBackground属性的理解(转载)相关推荐

  1. 关于Thread.IsBackground属性的理解

    C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程.个人感觉这样的解释等于没有解释. .Net中的线程,可以分为后台 ...

  2. 对C#中Thread.IsBackground属性的理解

    C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程.个人感觉这样的解释等于没有解释. .Net中的线程,可以分为后台 ...

  3. C#中Thread.IsBackground 属性

    Thread  thread.IsBackground =true; //Gets or sets a value indicating whether or not a thread is a ba ...

  4. 线程的IsBackground属性

    .Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出:而对于后台 ...

  5. c# 线程Thread的IsBackground属性

    1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的. 2.当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束. ...

  6. C# 多线程Thread.IsBackground=True的作用

    C#中多线程的线程加.IsBackground = true与不加有什么区别? 按照MSDN上讲:"获取或设置一个值,该值指示某个线程是否为后台线程." 其实这个解释并不到位,至少 ...

  7. [html] 说说你对HTML5中pattern属性的理解

    [html] 说说你对HTML5中pattern属性的理解 好像是判断input在输入时按下tab键跳转到下一个input的优先级 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚 ...

  8. [html] 说说你对属性data-的理解

    [html] 说说你对属性data-的理解 data- 属性是H5新增的自定义属性,也可以用来存储值.我个人用的不多,这个data- 属性倒是和vue中的v-bind 功能相似, 自定义属性,绑定数据 ...

  9. [html] 谈谈你对input元素中readonly和disabled属性的理解

    [html] 谈谈你对input元素中readonly和disabled属性的理解 相同点:都会使文本框变成只读,不可编辑.不同点:1.disabled属性在将input文本框变成只读不可编辑的同时, ...

最新文章

  1. 如何将全景分割用到养猪场?
  2. python分析基金数据,[Python数据分析]numpy基金会,基础
  3. 函数(复习),闭包,DOM
  4. 提高代码性能及并发性的方法浅谈
  5. jQuery——封装form表单的数据为json对象
  6. FP-growth算法高效发现频繁项集
  7. 如何将文件二进制传输至aix服务器,有什么办法把文件从WINDOWS系统中传到AIX中?...
  8. 点云法向量与点云平面拟合的关系(PCA)
  9. 为网站添加”网页加载中”特效
  10. Scala安装教程(最详细教程)
  11. 想用linux又想windows,Linux对Windows说:停止吵架,和平共处
  12. 判断API接口是否支持跨域
  13. 具有聚集诱导发射(AIE)特性的新型TADF分子SBF-BP-DMAC的定制合成
  14. Vagrant 手册之同步目录 - 基本用法
  15. 简单易学汇编语言入门_个人笔记
  16. ubuntu/Kubuntu 14.04以上无法安装傲游maxthon问题解决
  17. 【MySQL 8.0 OCP 1Z0-908认证考试】题库精讲--第三讲mysql8.0安装配置升级(中)
  18. hdu 5072 Coprime(同色三角形+容斥)
  19. C#实现.Net对邮件进行DKIM签名和验证,支持附件,发送邮件签名后直接投递到对方服务器(无需己方邮件服务器)
  20. django admin celery beat简单的定时任务管理平台

热门文章

  1. TypeScript 获取类名
  2. win11 修改host文件
  3. linux 配置串口驱动程序,linux下安装PCIE转串口卡驱动简介
  4. RAD PDF 高性能在线编辑|浏览|打印
  5. AI-ISP:手机相机是如何将风景变成图片的?
  6. python中如何定义类?
  7. 孙强:IT治理需六方结合
  8. 数据结构题目整理(编程)
  9. 【智能车学习】全向行进控制算法总结——驱动部分
  10. 微信小程序分享到好友或朋友圈