C# Thread IsBackground作用

C# Thread IsBackground作用背景之前在做一个定时下载任务的时候,使用的是一个主线程在执行任务;后面需求调整了,需要在启用一个子线程执行优先级更高的单独通道下载。于是下意识的这么做newThread//创建后台线程ThreadbThread=newThread(newThreadStart(background1.RunLoop));b…

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

Jetbrains全系列IDE稳定放心使用

背景

之前在做一个定时下载任务的时候,使用的是一个主线程在执行任务;后面需求调整了,需要在启用一个子线程执行优先级更高的单独通道下载。于是下意识的这么做 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();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • linux目录结构详解_linux系统文件在哪个目录

    linux目录结构详解_linux系统文件在哪个目录前言平常linux系统用的也不少,那么linux下的每个目录都是用来干什么的,小伙伴们有仔细研究过吗?让我们来了解下吧Linux系统目录结构登录系统后,在当前命令窗口下输入命令:[root@

    2022年7月29日
    3
  • oracle锁表怎么处理_锁表如何解决办法

    oracle锁表怎么处理_锁表如何解决办法ORACLE锁表如何处理看哪个表锁住了SELECTB.OWNER,B.OBJECT_NAME,A.SESSION_ID,A.LOCKED_MODEFROMV$LOCKED_OBJECTA,DBA_OBJECTSBWHEREB.OBJECT_ID=A.OBJECT_ID;执行sqlselect*fromv$sessiont1,v$lock…

    2022年8月23日
    7
  • 虚拟IP原理

    原文链接: http://xiaobaoqiu.github.io/blog/2015/04/02/xu-ni-iphe-ippiao-yi/                    http://www.cnblogs.com/crazylqy/p/7741958.html文中有两处用红色标记的文字,是博主认为错误的地方,故做了修改,若理解有误,还望指正。            …

    2022年4月5日
    107
  • 运行疑难解答时出错0x8000FFFF_win10无法继续执行代码

    运行疑难解答时出错0x8000FFFF_win10无法继续执行代码使用的编译器为VS2017.在调试所选测试的时候,出现如题报错。解决办法:将对应测试项目中的Properties文件夹中的lunchSettings.json文件删除,再进行调试,即可运行。转载于:https://www.cnblogs.com/hooyeefam/p/10109234.html…

    2022年9月2日
    7
  • oracle12.2灵异的ORA-01017: invalid username/password; logon denied[通俗易懂]

    oracle12.2灵异的ORA-01017: invalid username/password; logon denied[通俗易懂]今天研发一台数据库,我需要做个物理备份,出现一个灵异的错oracle@kungpeng-sk-db01[/oracle/product/122/dbs]$sqlplus/assysdbaSQL*Plus:Release12.2.0.1.0ProductiononFriOct1219:11:182018Copyright(c)1982,2016,Orac…

    2022年5月31日
    186
  • mvc页面传值的几种方式_netuse

    mvc页面传值的几种方式_netuse1、比如Request.Form["ddlType"]为control中需要模拟的内容2、在单元测试中调用的代码(使用的是VS2010自带的单元测试框架)         varrequest=newMock<HttpRequestBase>();//request.Setup(r=>r.HttpMethod)….

    2022年9月26日
    2

发表回复

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

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