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. C#中Thread.IsBackground 属性

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

  2. Thread.IsBackground

    解释: 获取或设置一个值,该值指示某个线程是否为后台线程. 后台线程不会防止应用程序的进程被终止掉. 注意: 主线程中创建了一个线程,线程的IsBackground默认是设置为FALSE的. 主线程退 ...

  3. 关于Thread.IsBackground属性的理解(转载)

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

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

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

  5. 高并发编程-Thread#interrupt用法及源码分析

    文章目录 官网 方法&源码 void interrupt() ` boolean isInterrupted()` vs `static boolean interrupted()` 方法&a ...

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

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

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

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

  8. C# Thread IsBackground作用

    背景 之前在做一个定时下载任务的时候,使用的是一个主线程在执行任务:后面需求调整了,需要在启用一个子线程执行优先级更高的单独通道下载.于是下意识的这么做 new Thread //创建后台线程Thre ...

  9. Thread.Join()用法的理解

    指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行      比如  1using System;  2  3namespace TestThreadJoin  4{ ...

最新文章

  1. 半导体物理与器件_上海交通大学874半导体物理2班开课啦!
  2. “从客户端中检测到有潜在危险的 Request.Form 值“的解决方案汇总
  3. Java实现从Html文本中提取纯文本
  4. Java开发笔记(一百零三)线程间的通信方式
  5. 前端只是切图仔?来学学给开发人看的UI设计
  6. 蓝桥杯基础模块06_1:定时器计数器
  7. docker学习总结二
  8. 最好浏览器_Windows最好的浏览器!只有你想不到,没有它做不到
  9. Docker从理论到实践(三)------配置你的DaoCloud的Docker镜像源加速器
  10. 【产品】保险业务收付管理系统概要
  11. adobe mac怎么卸载 ?彻底卸载Adobe Mac软件的正确做法
  12. 【笔记】74HC573的一些记录
  13. SDOI2019R2翻车记
  14. oracle 归档日志 重做日志,Oracle的重做日志和归档日志
  15. java color类红黄蓝_一种具有红黄蓝母体结构多发色体系的活性染料及其制备方法和应用与流程...
  16. Laplacian eigenmap 拉普拉斯特征映射
  17. 小米6无人直播详细教程+工具包
  18. 李炎恢bootstrap做轮播器的方法与思路
  19. ROS将xacro文件转换成URDF文件
  20. lte 中crs_LTE的CRS和DRS区别(转载自无线俱乐部公众号)

热门文章

  1. python汉诺塔_python 汉诺塔
  2. 当项目经理看世界杯决赛时…
  3. java-php-python-ssm校园摄影爱好者交流网站计算机毕业设计
  4. k8s部署留言板guestbook
  5. [08] 需要留意的一些东西
  6. linux系统封装为iso
  7. 微信小程序 textarea读取到的文本换行问题 以及保存回车换行到后台数据库
  8. 工程数学实验学习心得体会
  9. Java UDP 广播、组播使用--系列2-多网卡监听问题
  10. 【转帖】InternetOpen\InternetOpenUrl\InternetReadFile 等相关Win32 网络API 使用详细说明...