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相关推荐

  1. C#中Thread.IsBackground 属性

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

  2. 线程的IsBackground属性

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

  3. Thread.IsBackground

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

  4. 编写高质量代码改善C#程序的157个建议——建议74:警惕线程的IsBackground

    建议74:警惕线程的IsBackground 在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性.两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就 ...

  5. 【C#】后台线程IsBackground

    简单点来说: C#中的线程分前台线程和后台线程. 1 前台线程的问题及与后台线程的区别 对于前台线程来说,如果这些线程不退出,则主线程无法退出,则整个进程也无法退出.会造成即使界面窗口关掉了,但是进程 ...

  6. unity和C#的多线程 Thread的IsBackground属性,详解

    Thread的IsBackground = true;//主程序结束后,线程随之结束 [日常要用到的] Thread的IsBackground = false;//主程序结束后,线程不会随之结束 案例 ...

  7. 建议74:警惕线程的IsBackground

    建议74:警惕线程的IsBackground 在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性.两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就 ...

  8. C# IsBackground作用

    https://blog.csdn.net/snakorse/article/details/43888847 要点: 1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为 ...

  9. Thread 设置 IsBackground true false 的 运行差别

    1.这是一个 后台线程,IsBackground=true,  主线程完成后,后台子线程也停止了,即使 子线程 还有没运行完,也要停止 class Program{static void Main(s ...

最新文章

  1. 转:[大数据竞赛]协同过滤在这个问题上是否work
  2. 巧用Linux 架设TFTP Server备份路由器的配置文件
  3. oracle的函数索引怎么建,如何创建oracle函数索引
  4. Delphi 关键字详解
  5. [云炬创业学笔记]第二章决定成为创业者测试12
  6. Oracle 原理:复杂的SQL语句
  7. Python入门学习笔记08(random模块)
  8. bzoj1699[Usaco2007 Jan]Balanced Lineup排队
  9. vector java 复制_面试官:关于Java性能优化,你有什么技巧
  10. 微软全面拥抱 AI!
  11. Python之路(第十四篇)os模块
  12. Java实现的各种排序算法
  13. Google Chrome抓包分析详解
  14. 【BSP视频教程】STM32H7视频教程第14期:超干●货,MPU和Cache实战,一张图了解所有经典配置案例,争取人人都可以玩溜(2022-05-08)
  15. Arturia V Collection 9 for mac - Arturia系列合成器合集
  16. 迪杰斯特拉算法(dijkstra)_朴素版_堆优化版
  17. 洛谷 P8584 探索未知 题解
  18. 【VUE】图片预览放大缩小插件(推荐阅读)
  19. Android - ProGuard简介
  20. 推荐几款免费视频格式转换软件,比格式工厂更好用

热门文章

  1. java实现求解汉诺塔问题(提示, 使用递归)
  2. hadoop fs -ls后出现No such file or directory解决
  3. 趣味学python(018)
  4. 【KBQA综述-0】Complex Knowledge Base Question Answering: A Survey
  5. 放假啦!祝祖国母亲生日快乐!
  6. [Java] 继承和多态
  7. Eclipse安装记录
  8. 英语计算机测评,一种英语翻译结合计算机测评录入平台的制作方法
  9. vue+elementui实现可编辑表格
  10. Windows server 2008 FTP 防火墙设置