原文: http://blog.csdn.net/xuxujian/article/details/3690058
最近在学习多线程程序的开发,但是启动了多个线程的程序在关闭的时候却出现了问题,如果程序退出的时候不关闭线程,那么线程就会一直的存在,但是大多启动的线程都是局部变量,不能一一的关闭,如果调用Thread.CurrentThread.Abort()方法关闭主线程的话,就会出现ThreadAbortException 异常,因此这样不行。
后来找到了这个办法:
Thread.IsBackground 设置线程为后台线程。
msdn对前台线程和后台线程的解释:托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。同样,通过将 IsBackground 设置为 false,就可以将线程指定为前台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。
所以解决办法就是在主线程初始化的时候,设置:
Thread.CurrentThread.IsBackground = true;
这样,主线程就是后台线程,在关闭主程序的时候就会关闭主线程,从而关闭所有线程。
但是这样的话,就会强制关闭所有正在执行的线程,所以在关闭的时候要对线程工作的结果保存。
分享到:
相关推荐
在C#中,多线程是程序设计中的一个重要概念,它允许程序同时执行多个...在处理多线程任务时,特别需要注意的是线程安全性和资源管理,确保所有线程都能够正确地启动、执行和终止,避免出现死锁、资源泄漏等常见问题。
例如: for (int i = 0; i ; i++) { ...如何关闭其中的一个线程呢? 请下载解决方案。 呵呵,这个实例10分值的买, 觉得好的话就评个分吧,评分后会返回你11分 (一定要评分,光评论是不返分的)
在标题“WinForm C#多线程等待窗体”中,我们探讨的关键点是如何在进行耗时操作时创建一个等待窗体,让用户知道程序正在执行任务,并且不允许用户进行其他操作,直到任务完成。描述提到了“非托管资源”和...
"C#多线程扫描器"是一个利用C#语言特性实现的高效扫描工具,可能用于端口扫描或网络监控等场景。下面我们将详细讨论多线程的概念、C#中的多线程实现以及端口扫描的相关知识。 1. **多线程基础**: - **线程**:...
在C#编程中,多线程技术是一种提升程序性能的有效手段,特别是在处理大量I/O操作如文件复制时。本文将详细讲解如何利用C#实现文件的多线程复制,包括线程池的使用、线程数量限制以及FileStream类的读写功能。 首先...
在多线程环境中,可能出现各种异常,如网络问题、文件I/O错误等。我们需要确保每个线程都有适当的异常处理机制,避免程序崩溃,并能够正确地报告错误。 最后,当所有线程都完成下载任务后,可以合并所有下载的文件...
本项目“C# Winform动态创建和关闭多线程源码 可运行”提供了一个完整的解决方案,适用于Visual Studio 2010,它演示了如何在Winform应用中灵活地创建和管理多个线程。 一、线程基础 线程是操作系统分配CPU时间的...
### C#多线程操作详解 #### 一、线程的概念与重要性 在计算机科学领域,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过多线程技术来实现并发执行任务,...
本资源“C#多线程编程实战_中文完整版”提供了一个深入学习多线程技术的机会,尤其适合C#开发者进行实战训练。 一、线程基础 线程是操作系统分配CPU时间的基本单位。在C#中,可以使用System.Threading命名空间中的...
为了解决这个问题,我们可以利用多线程来实现等待窗体。 等待窗体(WaitForm)通常用于在后台线程执行长时间任务时向用户提供反馈,告知他们程序仍在运行并未崩溃。这种窗体通常包含进度条、文本信息或其他指示器,...
C#作为一种功能强大的.NET编程语言,提供了丰富的库支持来实现网络通信,其中包括使用socket进行多线程编程。本篇文章将深入探讨如何在C#中利用多线程和socket技术创建一个聊天室实例。 首先,理解`socket`的概念至...
了解这些基础知识后,你就可以创建一个能够充分利用多线程的C# Windows服务了。不过,这只是一个基础起点,实际开发中可能还需要考虑更多因素,如日志记录、配置管理、异常处理策略等,以确保服务的健壮性和可扩展性...
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
在C#编程中,多线程技术是一种常见且强大的工具,用于提高应用程序的性能和响应性。当一个耗时的任务需要执行时,如文件读写、网络请求或复杂的计算,多线程可以使用户界面(UI)保持流畅,不被长时间阻塞。在本教程...
在C#编程中,多线程技术是一种常用的方法,它能让我们在单个应用程序中同时执行多个任务,提高程序的效率和响应性。"等待窗体"是多线程应用中一个重要的概念,通常用于在后台任务执行时提供用户友好的界面反馈。本...
### C#中多线程与界面卡顿问题详解 #### 一、问题概述 在C#应用程序开发中,特别是Windows Forms应用中,界面卡顿是一个常见的问题。这往往发生在使用了多线程的情况下,尽管多线程技术可以有效提高程序性能,但...
【C# 多线程IP端口扫描器】 在编程领域,C#是一种广泛使用的面向对象的编程语言,尤其在Windows应用开发、游戏开发以及Web服务等领域有着深厚的根基。本项目是一个C#实现的多线程IP端口扫描器,其核心目标是快速...
在C#编程中,跨线程操作窗体控件是一个常见的需求,特别是在多线程环境中。标题提到的“c#跨线程跨类调用窗体控件”是指在一个线程(非UI线程)中,通过另一个类来操作属于UI线程的窗体控件,比如`Form1`中的`...
在本项目中,"c#多线程端口扫描程序源代码" 提供了一个利用C#实现的网络工具,它能扫描指定目标主机的多个端口,以检测哪些端口是开放的。这种功能在网络安全分析、系统调试和性能优化中非常常见。 多线程是C#中的...
以下是一些关于C#多线程串口通讯的关键知识点: 1. **System.IO.Ports命名空间**:这是C#中处理串口通信的核心,提供了SerialPort类,可以用来设置串口参数(如波特率、数据位、停止位、校验位等)以及进行读写操作...