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

关于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. [html] 说说你对HTML5中pattern属性的理解

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

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

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

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

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

  9. [css] 说说你对css的will-change属性的理解,它有什么作用呢?

    [css] 说说你对css的will-change属性的理解,它有什么作用呢? 告诉浏览器,这个元素的某些属性可能会频繁变动触发回流,要求浏览器给予资源进行优化,一般浏览器会给这个元素单独生成一个图层 ...

最新文章

  1. SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践
  2. python 快速排序
  3. thread.sleep是让哪个线程休眠_Java多线程:多线程基础知识
  4. C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?
  5. (36)FPGA面试题D触发器实现4进制计数器
  6. 大数据之_亿级分布式日志管理ELK_工作笔记001_ELK认识介绍
  7. 第11章[11.6] Ext JS 自行搭建远端库的包升级版本后找不到的问题解决-The following versions are available
  8. 1208. 尽可能使字符串相等
  9. 基于SSM的教学质量系统
  10. 关于MSHTML、IHTMLDocument、Ihtmldocument2-5的区别及 document.execCommand方法详解
  11. 【电路基础】第1章-电路的基本规律(1)
  12. oracle怎么将数据删除文件,oracle删除数据文件
  13. 浅析智慧消防巡检系统在高速公路隧道的应用
  14. 使用 Git 管理 Vim 插件
  15. 裸机服务器装系统步骤,组装裸机如何装系统?
  16. Pytorch搭建EfficientNet网络和Openmax
  17. 页面跳转之前显示等待 wating ------
  18. ZEROTIER ONE实现内网穿透
  19. NiFi Registry元数据详细介绍
  20. python之__slots__

热门文章

  1. unity3d collider自动调整大小_Unity 3D | 美术向系列教程2_地形系统介绍
  2. CSS中position属性(sticky)
  3. assembly.xml
  4. android 端口开启,高通手机打开DIAG端口 开启端口指令
  5. Java解洛谷P6771 [USACO05MAR]Space Elevator 太空电梯,包含完整的多重背包状态转移方程,大量注释,通俗易懂
  6. 2021-06-25kali更新火狐教程转
  7. JS 添加属性的两种方式
  8. toString()方法作用
  9. 由内功心法到武功秘籍,重心会有所转变 - 能上能下,才是终极
  10. 十大网站压力测试软件 - WEB压力测试工具介绍