C#多线程强制退出程序
最近在学习多线程程序的开发,但是启动了多个线程的程序在关闭的时候却出现了问题,如果程序退出的时候不关闭线程,那么线程就会一直的存在,但是大多启动的线程都是局部变量,不能一一的关闭,如果调用Thread.CurrentThread.Abort()方法关闭主线程的话,就会出现ThreadAbortException 异常,因此这样不行。
后来找到了这个办法:
Thread.IsBackground 设置线程为后台线程。
msdn 对前台线程和后台线程的解释:托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。同样,通过将 IsBackground 设置为 false,就可以将线程指定为前台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。
所以解决办法就是在主线程初始化的时候,设置:
Thread.CurrentThread.IsBackground = true;
这样,主线程就是后台线程,在关闭主程序的时候就会关闭主线程,从而关闭所有线程。
但是这样的话,就会强制关闭所有正在执行的线程,所以在关闭的时候要对线程工作的结果保存。
——————————————
C#程序的几种退出
1.Application.Exit(); //好像只在主线程可以起作用,而且当有线程,或是阻塞方法的情况下,很容易失灵
2.System.Environment.Exit(0); //无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净
3.this.Close();
4.Application.ExitThread();
分享到:
相关推荐
这个“C#多线程实例”压缩包很可能包含了一系列关于如何在C#中实现和管理多线程的代码示例。下面将详细阐述多线程的基本概念、应用场景以及C#中实现多线程的关键技术。 一、多线程基础 1. **线程定义**:线程是...
本压缩包“C#多线程Demo”提供了四个具体的WinForm多线程示例,旨在帮助开发者深入理解和掌握线程的使用。下面将详细介绍这些知识点。 1. **线程的创建与启动** 在C#中,我们可以通过`System.Threading`命名空间中...
C#提供了丰富的多线程支持,使得开发者能够轻松创建并管理多个执行线程,从而充分利用多核处理器的计算能力,提高程序的响应速度和整体性能。下面,我们将深入探讨C#中设置和管理多线程的相关知识点。 1. **线程...
### C#多线程操作详解 #### 一、线程的概念与重要性 在计算机科学领域,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过多线程技术来实现并发执行任务,...
在C#编程中,多线程技术是一种提升程序性能的重要手段,它允许程序同时执行多个任务,从而提高程序的响应速度和效率。本项目聚焦于如何利用多线程来生成素数,并且提供了暂停、开始、退出和恢复的功能,这对于理解和...
在C#编程中,多线程技术是一种提升应用程序性能的重要手段。它允许程序同时执行多个独立的任务,从而充分利用多核处理器的优势。线程池是一种管理线程资源的有效机制,而线程同步则是确保多线程间正确交互的关键概念...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代...通过学习和实践这些实例,开发者能够深入理解多线程编程的关键概念和技术,从而在实际项目中更好地应用多线程,提升程序性能和用户体验。
综上所述,C#中对外部exe执行程序的操作涉及多个方面,包括启动、控制和关闭。掌握这些技术对于构建功能丰富的应用程序至关重要。开发者应根据具体需求选择合适的方法,并注意遵循最佳实践,确保程序的高效、稳定...
在C#编程中,Windows Forms(Winform)应用程序经常需要处理多线程,以实现并发操作,提高程序的响应性和效率。本项目“C# Winform动态创建和关闭多线程源码 可运行”提供了一个完整的解决方案,适用于Visual Studio...
本篇笔记将深入探讨C#多线程的基本概念、操作方法以及注意事项。 首先,我们要理解多线程的基本概念。线程是程序执行的最小单位,每个线程都有自己的执行路径和栈空间,但它们共享同一块堆内存。因此,线程间的通信...
在C#编程中,多线程是一个非常关键的特性,尤其在处理大量并发任务或优化程序性能时。...提供的"WF_Project"可能包含了一些示例代码,进一步实践和学习这些概念,将有助于提升你的C#多线程编程技能。
比如遇到不可恢复的错误时,可以通过这种方式强制退出程序,以防止进一步的问题发生。 - **局限性**:会立即终止应用程序并释放所有资源,可能会导致数据丢失等问题。因此,在使用此方法之前,应确保所有必要的清理...
本资源"**c#多线程编程范例**"提供了全面的C#多线程开发示例,旨在帮助开发者深入理解和掌握多线程的代码编写方法。 ### 一、多线程基础 1. **线程定义**:线程是操作系统分配CPU时间的基本单元,一个进程可以有多...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能的应用程序。本压缩包包含6个C#.NET多线程实例,涵盖了多线程的基本使用以及更复杂的互斥控制机制...
在C#编程中,线程是多任务并行处理的基础,允许程序同时执行多个独立的代码段。然而,有时候我们需要控制或停止...在实际应用中,还需要考虑线程同步、异常处理以及资源管理等其他方面,以构建健壮的多线程应用程序。
在C#编程中,线程是程序执行的基本单元,它允许我们的应用程序同时处理多个任务。在Visual Studio 2008 (VS2008)中,开发人员可以使用C#语言来创建和管理线程,以实现多任务并行处理。本教程将详细介绍如何在VS2008...
另外,还有其他强制退出程序的方法,如`System.Threading.Thread.CurrentThread.Abort()`、`Process.GetCurrentProcess().Kill()`以及再次提到的`Application.ExitThread()`。这些方法直接终止当前线程或进程,可能...
多线程是现代软件开发中的一项关键技术,它允许程序同时执行多个任务,提高程序的运行效率。 #### 创建线程 ```csharp Thread thread = new Thread(new ThreadStart(Num)); ``` 这里使用`Thread`类创建了一个新的...
总的来说,多线程是C#编程中的一个重要概念,它允许程序并发执行任务,提高了程序的响应性和效率。在实现实时显示时间的功能时,我们创建了一个单独的线程来不断更新时间,并确保了UI更新的安全性。理解并熟练运用多...