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

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

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

相关推荐
Chris _data8 小时前
c#学习WPF笔记(一)
学习·c#·wpf
天天进步20158 小时前
Python全栈项目--基于机器学习的异常检测系统
开发语言·python·机器学习
xxie12379415 小时前
return与print
开发语言·python
秋915 小时前
从 Python 后端工程师转型 AI Engineer(AI 工程化)的完整补课清单(2026实战版)
开发语言·人工智能·python
程序员二叉15 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
慕木沐16 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
Roann_seo%16 小时前
C++文件操作完全指南:从文本读写到二进制文件处理
开发语言·c++
huangdong_17 小时前
淘宝商品SKU图自动分类技术深度解析:从DOM解析到智能归档
开发语言·javascript·ecmascript
阿正的梦工坊17 小时前
【Rust】12-借用检查器与非词法生命周期
开发语言·后端·rust
qq_25183645717 小时前
基于java Web网络订餐系统设计与实现 源码文档
java·开发语言·前端