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

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

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

相关推荐
软件开发技术深度爱好者几秒前
JavaScript的p5.js库使用详解(上)
开发语言·javascript
独自破碎E几秒前
包含min函数的栈
android·java·开发语言·leetcode
沛沛老爹1 分钟前
基于Spring Retry实现的退避重试机制
java·开发语言·后端·spring·架构
wregjru2 分钟前
【C++】2.9异常处理
开发语言·c++·算法
古城小栈2 分钟前
Rust unsafe 一文全功能解析
开发语言·后端·rust
没有bug.的程序员3 分钟前
Java IO 与 NIO:从 BIO 阻塞陷阱到 NIO 万级并发
java·开发语言·nio·并发编程·io流·bio
无情的8863 分钟前
S11参数与反射系数的关系
开发语言·php·硬件工程
AIFQuant4 分钟前
2026 澳大利亚证券交易所(ASX)API 接入与 Python 量化策略
开发语言·python·websocket·金融·restful
肆悟先生8 分钟前
3.18 constexpr函数
开发语言·c++·算法
别在内卷了9 分钟前
三步搞定:双指针归并法求两个有序数组的中位数(Java 实现)
java·开发语言·学习·算法