C# thread创建后未正常关闭应用,应用还在任务管理器里运行的解决办法1——后台线程

在写网络、串口等通讯类时,大多采用接收线程thread来将接收的数据缓存处理,但是如果未正常关闭线程会导致关闭应用程序后,程序仍在运行,就要自己添加相应退出线程的操作Abort等。
后来在官网上看到了这个关于【前台线程和后台线程】的描述:
托管线程可以是后台线程,也可以是前台线程。 后台线程和前台线程几乎完全相同,只有一处不同,即后台线程不会确保托管执行环境一直运行。 一旦托管进程(其中 .exe 文件为托管程序集)中的所有前台线程都停止,系统会停止并关闭所有后台线程。
备注
如果运行时因进程正在关闭而停止后台线程,不会在线程中抛出任何异常。 不过,如果线程因 AppDomain.Unload 方法卸载应用域而停止,前台线程和后台线程中都会抛出 ThreadAbortException。
Thread.IsBackground 属性可用于确定是后台线程还是前台进程,也可用于更改线程状态。 可以随时将线程的 IsBackground 属性更改为 true,将线程更改为后台线程。
重要
线程的前台或后台状态不会影响线程中抛出未经处理的异常。 前台线程或后台线程中未经处理的异常会导致应用程序终止。 请参阅托管线程异常。
属于托管线程池的线程(即 IsThreadPoolThread 属性为 true 的线程)是后台线程。 从非托管代码进入托管执行环境的所有线程都会标记为后台线程。 默认情况下,通过新建并启动 Thread 对象生成的所有线程都是前台线程。
如果使用线程监视活动(如套接字连接),请将它的 IsBackground 属性设置为 true,以便线程不会阻止进程终止。

根据上述描述,我在启动线程前添加了后台线程属性设置后线程就随进程正常退出了。如下所示:
var t1 = new Thread(ReceiveMsg);
t1.IsBackground = true;
t1.Start();
目前用着没毛病,或许能帮助到有同样困惑的兄弟们。希望各位看官再指点一二。谢谢!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值