背景

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

//创建后台线程Thread bThread = new Thread(new ThreadStart(background1.RunLoop));bThread.Name = "后台线程";复制代码

一开始是没事么问题,后面测试了下发现当程序退出了,线程竟然还在下载,就是说线程没有随着程序的结束而结束;

问题就出在前台线程与后台线程的区别。

C#中的线程分前台线程和后台线程

对于前台线程来说,如果这些线程不退出,则主线程无法退出,则整个进程也无法退出。会造成即使界面窗口关掉了,但是进程管理器里还有该程序。因此,在关闭窗口时,需要编程显示的把这些前台线程关掉才行。但是,这样就会带来个问题,需要记录这些前台线程的实例才行,很不方便。为此,可以把线程定义为后台线程。后台线程与前台线程的唯一区别就是:后台线程不需要主动关闭。当所有前台线程都退出以后,主线程会自动的关掉后台线程,然后让进程退出。

后台线程的定义方法

定义线程为后台线程的方法为:

Thread backgroundThread = new Thread(new ThreadStart(longTest.RunLoop));backgroundThread.IsBackground = true;  //定义为后台线程复制代码

后台线程的问题

当然,定义为后台线程时,仍然有一种情况,会导致无法退出的情况。即后台线程引用了主界面的句柄时。很干脆的解决线程无法退出的方法;当然,这里有一个干脆的直接杀掉所有线程的方法:程序主窗口的 Closed 事件中添加代码:

Process.GetCurrentProcess().Kill();

C# Thread IsBackground作用相关推荐

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

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

  2. 关于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. Thread.IsBackground

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

  5. C# IsBackground作用

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

  6. Thread.setDefaultUncaughtExceptionHandler作用

    刚刚看到ResourceManager源码第一行,就遇到了比较陌生的用法,特意研究一下,如何使用? 看源码的目标不就是学习,更好的来完善自己的代码,而不是面试时候的谈资. 下面是一个自己写的demo, ...

  7. Thread.isbackground用法

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

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

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

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

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

最新文章

  1. H.264/H265码流解析
  2. 数据可视化:Matplotlib vs ggplot2
  3. 时空大数据赋能智慧城市的思考和实践
  4. Android开发日常笔记
  5. mysql alter算法_MySQL ALTER命令_mysql alter_添加_删除_修改
  6. idea 提示vue插件_Vue + SpringBoot + MyBatis 音乐网站
  7. 找出一个数组中出现次数最多的那个元素
  8. servlet需要和ajax,如何使用Servlet和Ajax?
  9. python前n项和存为一个数组_在Python中存储多个数组
  10. wireshark抓组播数据_HCIE学习笔记--组播路由协议PIM-DM工作机制解析
  11. jQuery firefox chrome IE 绑定mousewheel事件
  12. 公告:CSDN下载频道在线举报功能正式上线
  13. 12张图读懂模电、数电必备的电路基础知识
  14. html所有标签大全wps文件,html所有标签及其作用说明.wps
  15. 导出微信聊天记录生成词云
  16. win10 企业版2016长期服务激活教程
  17. 个人认为制作系统盘(U盘启动盘)最干净的方式?
  18. 跟李沐学深度学习-softmax回归
  19. 固定资产管理系统能给企业带来什么?
  20. 【最优化问题】方法总结

热门文章

  1. 情系玉树, 大爱无疆----抗震救灾
  2. 电子商务若干关键问题的分析
  3. xml 转 java_XML转换为JAVA
  4. 1099端口被占用解决方法
  5. NAT模式 桥接模式bridge原理理解
  6. Spring Boot——分布式
  7. MySQL集群节点参数说明
  8. java 循环遍历字符串_Java 程序迭代遍历字符串中的每个字符
  9. JS 添加属性的两种方式
  10. 图像视频去雨的几种主流方法