【C#】后台线程IsBackground
简单点来说:
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相关推荐
- IsBackground前台线程与后台线程的区别
IsBackground: 前台线程与后台线程的区别: 只有当 前台线程全部结束,应用程序才能被卸载(才能被关闭),而后台线程则不然,只要关闭程序,即便是后台线程没有执行完,也会随之自动结束.
- java中的后台线程、前台线程、守护线程区别
java中的后台线程.前台线程.守护线程区别 区别和联系 区别 联系 区别和联系 区别 后台线程和守护线程是一样的. 后台线程不会阻止进程的终止,而前台线程会, 可以在任何时候将前台线程修改为后台线程 ...
- C#:前台线程后台线程
1.线程分类 线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;还有一种是由CLR创建,这 ...
- 前台线程和后台线程(Foreground and Background Threads)
前台线程和后台线程(Foreground and Background Threads) 这周学习多线程,将一些想法和学习到的东西记录下来,分享跟大家.说的不对的地方,欢迎大家指正. 本小篇讨论前台线 ...
- C#中的前台线程和后台线程的区别
前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程. 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动 ...
- 线程学习3——前台线程和后台线程
前台线程和后台线程 线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活. 后台线程:只要有一个前台线程在运行,应用程序的进程就在运行.如果多个前台线程在运行,而Main()方法结束了,应用 ...
- 前台线程和后台线程的理解
线程有两种:前台线程和后台线程. 区别是:应用程序必须运行完所有的前台线程才可以退出:而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束. 主 ...
- 2.innodb后台线程
innodb存储引擎架构 后台线程的作用: 刷新内存中的数据和写入磁盘的数据,并且在数据库异常时,innodb能恢复正常 内存池的作用: 维护内部使用的数据结构,缓存磁盘上的数据,重做日志(redo ...
- 当进度对话框和后台线程处于活动状态时,如何处理屏幕方向变化?
我的程序在后台线程中执行一些网络活动. 在开始之前,它会弹出一个进度对话框. 该对话框在处理程序上关闭. 这一切都可以正常工作,除非对话框打开(并且背景线程正在运行)时屏幕方向发生变化. 此时,应用程 ...
最新文章
- SVO学习笔记(二)
- R语言ggplot2可视化:使用堆叠的条形图(Stacked Barplot)可视化每个数据行(row)的缺失值的情况(Visualizing missing data counts in rows)
- hdu 4751(dfs染色)
- 2008 R2 辅域安装和卸载(加域、退域及组策略的测试)
- Oracle数据库进程
- 关于linux内存管理
- 日常笔记-css\html篇
- 2019.08.04 新建随笔
- 【以太坊智能合约】Embark Framework 开发基础篇
- Linux Capabilities 入门教程--进阶实战篇
- 选ac+ap还是mesh方案?
- UNIX环境高级编程之第1章:UNIX基础知识
- 全景探秘游戏设计艺术(1):游戏设计师
- 数学建模 员工指派问题 Lingo求解优化问题
- LabVIEW开发实战:Labview简介
- 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
- SYS.MON_MODS$、SYS.MON_MODS_ALL$和DBA_TAB_MODIFICATIONS
- 解决网络连接正常,网页打不开的问题
- win10在此计算机上找不到系统映像,大神分析win10系统使用DISM修复找不到源的具体步骤...
- 360度全景拼接之成像模型与柱面投影