简单点来说:
C#中的线程分前台线程和后台线程。

1 前台线程的问题及与后台线程的区别

对于前台线程来说,如果这些线程不退出,则主线程无法退出,则整个进程也无法退出。会造成即使界面窗口关掉了,但是进程管理器里还有该程序。因此,在关闭窗口时,需要编程显示的把这些前台线程关掉才行。

但是,这样就会带来个问题,需要记录这些前台线程的实例才行,很不方便。为此,可以把线程定义为后台线程。后台线程与前台线程的唯一区别就是:
后台线程不需要主动关闭。
当所有前台线程都退出以后,主线程会自动的关掉后台线程,然后让进程退出。

2 后台线程的定义方法

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

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

3 后台线程的问题

当然,定义为后台线程时,仍然有一种情况,会导致无法退出的情况。即后台线程引用了主 界面的句柄时。参见:引起后台线程无法退出的原因:https://blog.csdn.net/zhuguanghe/article/details/2486669

4 很干脆的解决线程无法退出的方法

当然,这里有一个干脆的直接杀掉所有线程的方法:
程序主窗口的 Closed 事件中添加代码:

Process.GetCurrentProcess().Kill();

这里没有试过,参考了网上的一些说法。

参考:
【1】https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.isbackground?view=netframework-4.6.1&f1url=%3FappId%3DDev15IDEF1%26l%3DEN-US%26k%3Dk(System.Threading.Thread.IsBackground);k(TargetFrameworkMoniker-.NETFramework,Version%253Dv4.6.1);k(DevLang-csharp)%26rd%3Dtrue
【2】https://blog.csdn.net/zht666/article/details/21647923
【3】引起后台线程无法退出的原因:https://blog.csdn.net/zhuguanghe/article/details/2486669

【C#】后台线程IsBackground相关推荐

  1. IsBackground前台线程与后台线程的区别

    IsBackground: 前台线程与后台线程的区别: 只有当 前台线程全部结束,应用程序才能被卸载(才能被关闭),而后台线程则不然,只要关闭程序,即便是后台线程没有执行完,也会随之自动结束.

  2. java中的后台线程、前台线程、守护线程区别

    java中的后台线程.前台线程.守护线程区别 区别和联系 区别 联系 区别和联系 区别 后台线程和守护线程是一样的. 后台线程不会阻止进程的终止,而前台线程会, 可以在任何时候将前台线程修改为后台线程 ...

  3. C#:前台线程后台线程

    1.线程分类 线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;还有一种是由CLR创建,这 ...

  4. 前台线程和后台线程(Foreground and Background Threads)

    前台线程和后台线程(Foreground and Background Threads) 这周学习多线程,将一些想法和学习到的东西记录下来,分享跟大家.说的不对的地方,欢迎大家指正. 本小篇讨论前台线 ...

  5. C#中的前台线程和后台线程的区别

    前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程. 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动 ...

  6. 线程学习3——前台线程和后台线程

    前台线程和后台线程 线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活. 后台线程:只要有一个前台线程在运行,应用程序的进程就在运行.如果多个前台线程在运行,而Main()方法结束了,应用 ...

  7. 前台线程和后台线程的理解

    线程有两种:前台线程和后台线程. 区别是:应用程序必须运行完所有的前台线程才可以退出:而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束. 主 ...

  8. 2.innodb后台线程

    innodb存储引擎架构 后台线程的作用: 刷新内存中的数据和写入磁盘的数据,并且在数据库异常时,innodb能恢复正常 内存池的作用: 维护内部使用的数据结构,缓存磁盘上的数据,重做日志(redo ...

  9. 当进度对话框和后台线程处于活动状态时,如何处理屏幕方向变化?

    我的程序在后台线程中执行一些网络活动. 在开始之前,它会弹出一个进度对话框. 该对话框在处理程序上关闭. 这一切都可以正常工作,除非对话框打开(并且背景线程正在运行)时屏幕方向发生变化. 此时,应用程 ...

最新文章

  1. SVO学习笔记(二)
  2. R语言ggplot2可视化:使用堆叠的条形图(Stacked Barplot)可视化每个数据行(row)的缺失值的情况(Visualizing missing data counts in rows)
  3. hdu 4751(dfs染色)
  4. 2008 R2 辅域安装和卸载(加域、退域及组策略的测试)
  5. Oracle数据库进程
  6. 关于linux内存管理
  7. 日常笔记-css\html篇
  8. 2019.08.04 新建随笔
  9. 【以太坊智能合约】Embark Framework 开发基础篇
  10. Linux Capabilities 入门教程--进阶实战篇
  11. 选ac+ap还是mesh方案?
  12. UNIX环境高级编程之第1章:UNIX基础知识
  13. 全景探秘游戏设计艺术(1):游戏设计师
  14. 数学建模 员工指派问题 Lingo求解优化问题
  15. LabVIEW开发实战:Labview简介
  16. 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
  17. SYS.MON_MODS$、SYS.MON_MODS_ALL$和DBA_TAB_MODIFICATIONS
  18. 解决网络连接正常,网页打不开的问题
  19. win10在此计算机上找不到系统映像,大神分析win10系统使用DISM修复找不到源的具体步骤...
  20. 360度全景拼接之成像模型与柱面投影

热门文章

  1. TypeScript 获取类名
  2. MySQL海量数据分布式存储
  3. MySQL--集合运算
  4. JAVA语言强制类型转换要求
  5. 前端快速入门 TCP/IP
  6. Android调试技巧之模拟内存不足
  7. android 播放rtsp流的三种方式
  8. python 时间序列prophet 模型分析_如何评价facebook开源的prophet时间序列预测工具?...
  9. “肉鸡”是这样获得的
  10. 10大理由告诉你为什么要学习Python