C#程序关闭时保证所有线程结束的方法

一:问题描述

        之前做一个c#项目,需要同时接收几个IP的TCP信息,还需要同时保存数据到关系数据库和时序数据库,还需要同时接收几个硬件信息,总之线程乱七八糟。之前关闭程序时老是遇到各种问题:

1)相机对象已经dispose了,线程还在读其缓存中的内容

2)tcp连接已经关闭了,还在读read tcp消息

。。。

        各种五花八门的错,查看很多资料,在Form_closed函数中加了这句话:

                System.Diagnostics.Process.GetCurrentProcess().Kill();

        嗯,kill的特别干净,再也不报那些乱七八糟的错了,但新的问题出现了:

        因为项目连着工业相机硬件,kill的时候不知道为什么把相机程序也给kill掉了,整一个大无语。程序变成一次性的,就是第一次打开程序可以找到相机,关闭之后再打开就找不到相机了……

二:解决方法

        又查询了很多资料,解决方法如下:

       1)每一个新创建的Thread后都要跟一个IsBackground=true命令,确保主线程退出时后台线程也跟着退出

        2)Form_closed函数中的命令改成:

                 System.Environment.Exit(0); 

        这是一个比较彻底的线程退出方式。

目前运行看还没什么问题,有问题再继续更新……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值