C#程序关闭时怎么关闭子线程
2015-08-16 00:34
459 查看
一、在实际编码中会遇到这种问题:
在客户关闭程序时,主线程直接关闭,不考虑子线程。
但是任务管理器中,主程序进程还在运行(在等子线程结束,而子线程做成了while(1)等情况)
二、在主线程关闭处理时,首先关闭子线程。
类似代码如下:
但是会遇到主程序关不掉,类似于死机的状态
三、在程序启动时强制停止同名进程
四、把线程赋值为null
五、逼格最高的版本,使用Thread对象的一个IsBackground属性,设置为true即可,在主线程关闭时,子线程随之关闭,速度很快。
参考博文:http://blog.csdn.net/effectiveagui/article/details/7841792
在客户关闭程序时,主线程直接关闭,不考虑子线程。
但是任务管理器中,主程序进程还在运行(在等子线程结束,而子线程做成了while(1)等情况)
二、在主线程关闭处理时,首先关闭子线程。
类似代码如下:
private void Main_FormClosing(object sender, FormClosingEventArgs e) { if (flowThread != null && flowThread.isAlive) flowThread.Abort(); this.Dispose(); }
但是会遇到主程序关不掉,类似于死机的状态
三、在程序启动时强制停止同名进程
Process[] processes = System.Diagnostics.Process.GetProcesses(); //获得所有进程 foreach (Process p in processes) { if (p.ProcessName == "WaterMonitorIS_Weiding" && p.StartTime < DateTime.Now.AddMinutes(-2)) { p.Kill(); } }
四、把线程赋值为null
private void Main_FormClosing(object sender, FormClosingEventArgs e) { flowThread = null; this.Dispose(); }
五、逼格最高的版本,使用Thread对象的一个IsBackground属性,设置为true即可,在主线程关闭时,子线程随之关闭,速度很快。
flowThread.IsBackground = true;
参考博文:http://blog.csdn.net/effectiveagui/article/details/7841792
相关文章推荐
- C#生成随机验证码
- C#生成验证码
- 无刷新上传图片以及使用C#语言
- C#对Ajax页面内容采集
- C#与yaml解析
- 编写高质量代码改善C#程序的157个建议——建议45:为泛型类型参数指定逆变
- 编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变
- 编写高质量代码改善C#程序的157个建议——建议43:让接口中的泛型参数支持协变
- 关于C# wpf Frame 一次加载多个Page 的问题
- 编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性
- 编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型
- 编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
- 【C#】TreeView应用
- C# WebService URL重写
- [C#]6.0新特性浅谈
- C# RGB和HSB相互转换
- 编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质
- C#垃圾回收机制详解
- 编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱
- 编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法