当前位置:网站首页>C# Thread IsBackground作用
C# Thread IsBackground作用
2022-08-02 03:37:00 【dotNET跨平台】
背景
之前在做一个定时下载任务的时候,使用的是一个主线程在执行任务;后面需求调整了,需要在启用一个子线程执行优先级更高的单独通道下载。于是下意识的这么做 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();边栏推荐
猜你喜欢

QT中更换OPENCV版本(3->4),以及一些宏定义的改变

深蓝学院-视觉SLAM十四讲-第七章作业

Research Notes (8) Deep Learning and Its Application in WiFi Human Perception (Part 2)

《2022年中国网络安全市场全景图》

对周期内时间段是否重叠进行校验

金融行业案例 | 未来智安XDR助力银行业客户优化安全运营体系,有效提高告警研判率

ffmpeg视频播放、格式转化、缩放等命令

【学习笔记】如何打造运维组织架构

未来智安入围《2022年中国数字安全百强报告》,威胁检测与响应领域唯一XDR厂商

Django、Rest framework访问数据库获取数据
随机推荐
CC1101魔幻的收发切换机制
位居榜首 | 未来智安荣登CCIA「2022年中国网安产业潜力之星」榜单
jmeter之数据库连接JDBC安装与使用
[Win11] PowerShell cannot activate Conda virtual environment
ES6中变量的使用及结构赋值
未来智安XDR及核心组件产品上榜《嘶吼2022网络安全产业图谱》
盒子移动和滚动加载效果练习
MySQL read-write separation mysql-proxy deployment
深蓝学院-手写VIO作业-第一章
SCI期刊最权威的信息查询步骤!
windows系统下php-ffmpeg类库的使用
3D目标检测之数据集
Nexus 5 phone uses Nexmon tool to get CSI information
吴恩达机器学习系列课程笔记——第七章:正则化(Regularization)
SCI writing strategy - with common English writing sentence patterns
PHP实现阿里云HMAC-SHA1签名方法封装
OpenCV内阈值处理方法
树莓派上QT连接海康相机
Research Notes (8) Deep Learning and Its Application in WiFi Human Perception (Part 1)
携手推进国产化发展,未来智安与麒麟软件完成兼容互认证