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

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

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

相关推荐
多米Domi01112 小时前
0x3f 第43天 黑马点评全量复习一遍 + 栈两题
开发语言·数据结构·python·算法·leetcode
码农水水12 小时前
京东Java面试被问:分布式会话的一致性和容灾方案
java·开发语言·数据库·分布式·mysql·面试·职场和发展
白小筠12 小时前
迭代器与生成器
开发语言·python
郝学胜-神的一滴12 小时前
Linux网络字节序详解:从理论到实践
linux·服务器·c语言·开发语言·c++·网络协议·程序人生
夏幻灵12 小时前
Java中的this关键字解析与应用
java·开发语言·python
移幻漂流12 小时前
JNI的本质解析:Android Framework视角下的Java-Native衔接机制
android·java·开发语言
baivfhpwxf202312 小时前
C# Task.Run 和 Task.Factory.StartNew 的区别
开发语言·c#
难得的我们12 小时前
C++中的状态模式
开发语言·c++·算法
eWidget12 小时前
Shell循环进阶:break/continue,循环嵌套与优化技巧
运维·开发语言·ffmpeg·运维开发
爱喝水的鱼丶13 小时前
SAP-ABAP:从SAP中暴露REST API:完整实操SICF接口开发指南
运维·开发语言·api·sap·abap·rest·接口开发