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);

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

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

相关推荐
2501_930707784 分钟前
使用C#代码压平 PDF 表单字段
数据库·pdf·c#
铅笔小新z6 分钟前
【C语言】数据类型和变量
c语言·开发语言
code_whiter11 分钟前
C++11(stack和queue)
开发语言·c++
最后一支迷迭香15 分钟前
苹果的MacOS系统适合做Java开发吗
java·开发语言·macos
m0_7390300016 分钟前
[特殊字符] Java 高频面试题汇总
java·开发语言·面试
2zcode17 分钟前
基于MATLAB的5G物理层文本传输系统仿真与性能分析
开发语言·5g·matlab
feifeigo12326 分钟前
基于布谷鸟算法的配电网分布式电源选址定容 MATLAB 实现
开发语言·算法·matlab
Mike117.29 分钟前
GBase 8a 宽表查询里的压缩和行存列取舍
java·开发语言·数据库
辰尘_星启31 分钟前
【ROS2】 Python 节点的开发流程
开发语言·python·机器人·系统·控制·ros2
计算机安禾35 分钟前
【c++面向对象编程】第12篇:继承(二):构造与析构顺序,继承中的构造函数
开发语言·c++