【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓之ViewPager详解_ViewPager怎么用_ViewPager仿微博特效

    首先,展示一下ViewPager是什么样子的,用过新浪微博客户端的应该对下面的画面很熟悉,(画面不是很美观,主要就是那么个意思,将就着看吧….)下面那个允许你来回滑动显示不同页面的区域就是一个ViewPager,在这里就不解释了.布局文件如下:activity_weibo.xml

    2022年3月9日
  • jsonObject.getString()与jsonObject.optString()「建议收藏」

    jsonObject.getString()与jsonObject.optString()「建议收藏」常见使用原生的解析json方法:JSONObjectjsonObject=newJSONObject();Stringstr1=jsonObject.optString(“6不6”);Stringstr2=jsonObject.optString(“6不6″,”默认6”);try{Str

    2022年9月2日
  • 详解 JVM Garbage First(G1) 垃圾收集器「建议收藏」

    详解 JVM Garbage First(G1) 垃圾收集器「建议收藏」版权声明:本文为博主原创文章,转载请联系作者并注明出处。详解JVMGarbageFirst(G1)垃圾收集器前言GarbageFirst(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进

    2022年6月13日
  • MutationObserver 方法

    MutationObserver 方法MutationObserver是什么MutationObserverAPI让我们能监听DOM树变化,该API设计用来替换掉在DOM3事件规范中引入的Mutationevents。Mutationevents是同步触发的,每次变动都会触发一次调用。MutationObserverAPI是异步触发的,DOM的变动并不会马上触发,而是要等到当前所有DOM操作都结束才触发。所以MutationObserver相比Mutationevents性能要更高。代码

    2022年11月3日
  • org.apache.axis.AxisFault.makeFault(AxisFault.java:101)问题「建议收藏」

    org.apache.axis.AxisFault.makeFault(AxisFault.java:101)问题「建议收藏」今天搞了个webservice,但出现如下错误org.apache.axis.AxisFault.makeFault(AxisFault.java:101);org.apache.axis.client.Call.invoke(Call.java:2760);org.apache.axis.client.Call.invoke(Call.java:2443);org.apache.axis.client.Call.invoke(Call.java:2366);org.apache.axis.

    2022年9月3日
  • Android之ViewPager的简单使用[通俗易懂]

    Android之ViewPager的简单使用[通俗易懂]AndroidViewPager的简单使用Android3.0后引入的一个UI控件——ViewPager(视图滑动切换工具)功能:通过手势滑动可以完成View的切换,一般是用来做APP的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4兼容包ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager设置切换时

    2022年7月22日

发表回复

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

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