大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181328.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...