当前位置: 首页 > article >正文

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

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

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


http://www.kler.cn/a/513605.html

相关文章:

  • CPU狂飙900%如何分析?怎么定位?怎么溯源处理
  • win32汇编环境,对多行编辑框添加或删除文本
  • 2024年度总结-CSDN
  • 资料03:【TODOS案例】微信小程序开发bilibili
  • EDI安全:2025年数据保护与隐私威胁应对策略
  • vulnhub靶场【IA系列】之Tornado
  • elasticsearch 数据导出/导入
  • 【记录】记录项目中的问题
  • Linux常用汇总
  • windows下修改docker的镜像存储地址
  • 易语言模拟真人鼠标轨迹算法 - 防止游戏检测
  • Axios HTTP库基础教程:从安装到GET与POST请求的实现
  • 二十八、Qos服务质量
  • 优化使用 Flask 构建视频转 GIF 工具
  • DeepSeek-R1性能如何?如何使用DeepSeek-R1和o1 Pro模型
  • Java 前端详解
  • PHP语言的文件操作
  • AF3 _attention 函数解读
  • github汉化
  • 人工智能在数字化转型中的角色:从数据分析到智能决策
  • STM32-CAN总线
  • Swift 实现:颠倒 32 位无符号整数的二进制位
  • 构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(15)
  • AUTOSAR从入门到精通-线控底盘技术
  • 一、vue智能Ai对话(高仿通义千问)普通版。
  • 数电票:引领会计行业数字化革命的关键力量