【C#】后台线程IsBackground「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

简单点来说:
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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181328.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 特殊符号心形_wps中斜杠怎么做

    特殊符号心形_wps中斜杠怎么做加帽子符号latex中如果想在字母上加上一个帽子(尖角)符号应该怎样表达呢?(1)如果是在正文中,例如用\^{Z}即可;(2)如果是在公式中,例如用\hat{Z}即可。加横线和波浪线加^号输入\hat 或\widehat加横线输入\overline加波浪线输入\widetilde加一个点\dot{要加点的字母}加两个点\ddot{要加点的字母}其…

    2025年7月4日
    4
  • C++ eigen_c++第三方库

    C++ eigen_c++第三方库前言Eigen就是一个线性代数的C++库。它对矩阵(MatrixMatrix)和向量(VectorVector)等相关线性代数的运算操作进行了比较系统的实现。一、矩阵1.定义矩阵模板函数共包含六个参数template<typename_Scalar,int_Rows,int_Cols,int_Options,int_MaxRows,int_MaxC…

    2022年10月19日
    3
  • 字符串-字典树_求一个字符串的所有子串

    字符串-字典树_求一个字符串的所有子串HDU-1251统计难题POJ-3603PhoneListAcWing-143最大异或对HDU-5536ChipFactory字典树,顾名思义是以树结构来模拟字典。回想我们查字典的过程,比如查找”man”,先翻到字典m部分,再翻第二个字母a和第三个字母n,一共查找3次。查找次数最多是等于个单词的长度。插入查找单词的时间复杂度时O(m)O(m),此外有公共前缀的单词只需存一次公共前缀,节省了空间。

    2025年9月24日
    5
  • c语言define的用法

    c语言define的用法1 define 的简单定义作用 define 相当于一个简单的文本替换 对于普通的常量定义 我就不必多说了 但是对于类似于函数定义的形式 可能会出现错误 例如 defineAdd x y x y 用到代码中时会出现问题 比如计算式子 c Add x y d 本意是计算出 x 与 y 的和之后在分别与 c d 做乘积 可是因为 define 仅仅相当于一个简单的文本替换 所以真实的计算

    2025年8月25日
    5
  • Navicat Premium 15 激活码 2021【2021免费激活】

    (Navicat Premium 15 激活码 2021)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsa…

    2022年3月26日
    177
  • C#–遍历目录实例

    C#–遍历目录实例

    2022年1月26日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号