Application.Exit()结束程序,但线程还在的解决方法。

Application.Exit()结束程序,但线程还在的解决方法。

出现此情况大多原因是使用了多线程编程,或者你所调用的dll使用了多线程。
我们知道,一般情况下的线程执行完指定的任务之后是会关闭了的,但是如果对于一些循环类线程,或者忘记关掉的线程时,这个时候就需要我们手动将之强制关闭。
用以下三个中的一个即可尝试强制关闭线程。

复制内容到剪贴板

代码:

Application.ExitThread();//退出当前线程上的消息循环,并关闭该线程上的所有窗口。   

复制内容到剪贴板

代码:

System.Environment.Exit(0);
//终止当前进程并为基础操作系统提供指定的退出代码

复制内容到剪贴板

代码:

Process.GetCurrentProcess().Kill();//终止当前正在运行的线程

但是这些方法都是强制关闭,那么我们如何使用Application.Exit();正常的关闭整个程序呢?
这个时候我们要引用下微软对Application.Exit();的解释了:

复制内容到剪贴板

代码:

Application.Exit();// 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口

我们看的非常清楚,停止在所有线程上运行的所有消息循环,既然是所有,那又为何关闭不掉呢?这里我们要搞清楚一点的就是,新开的进程属于另一个domain(域),你要搞清楚的是进程不等于线程,application.exit();是关闭当前进程的所有线程,不能关闭它创建的进程。新进程和本进程无任何关系。
所以,我们可以这样理解Application.Exit();

复制内容到剪贴板

代码:

Application.Exit();// 方法停止在当前进程上的所有线程上运行的所有消息循环,并关闭当前进程上的应用程序的所有窗口。

所以,我们要想在当前进程上使用Application.Exit();关闭其他进程,就要把其他的进程设置为当前进程的后台进程(IsBackground),而当在主线程中创建了一个线程时,那么该线程的IsBackground默认是设置为FALSE的。当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。只有IsBackground=TRUE的线程才会随着主线程的退出而退出。当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。

因此我们在创建完进程之后要在后面加上一句:

复制内容到剪贴板

代码:

IsBackground=true;

然后它才可以被当前进程所控制,然后才可以用Application.Exit();结束。

本文由洗白白丶首发于51cto--.Net论坛,转载请保留此段文字说明。

http://bbs.51cto.com/thread-970057-1.html

原文地址:https://www.cnblogs.com/alps/p/9068312.html

时间: 2024-08-28 21:35:59

Application.Exit()结束程序,但线程还在的解决方法。的相关文章

excel2003出现“向程序发送命令时出现错误”解决方法

电脑已经预装了office2010,因为想要学习 <Excel 图标之道>,安装了Excel2003,刚刚安装好,打开出现“向程序发送命令时出现错误”,虽然点击确定就可以用了,可总是觉得不爽,网上找了相关方法, 1. 在资源管理器中进入“C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates”目录,删除其中的“Normal.dot”公用模板文件(可能还有个隐藏的编辑中的文件,一并删除),再重新启动

“程序已停止工作”问题的解决方法,停止解决方法

"程序已停止工作"问题的解决方法,停止解决方法 问题 遇到一个程序打不开的错误,如图: 问题详细信息如下: 问题签名:问题事件名称: CLR20r3问题签名 01: rdh-idss.exe问题签名 02: 1.0.1.0问题签名 03: 5510d590问题签名 04: RDH-IDSS问题签名 05: 1.0.1.0问题签名 06: 5510d590问题签名 07: 92问题签名 08: 10问题签名 09: System.BadImageFormatException 解决 1)

vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装。的解决方法

vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装.的解决方法_华英雄_新浪博客 http://blog.sina.com.cn/s/blog_54bf02090100xlqy.html   现象:VMware Workstation 8.0在安装VMware Tools时弹出对话框,提示"安装程序无法继续.Microsoft Runtime DLL安装程序未能完成安装."如图: 原因:虚拟机中Windows Installer服务

ADODB.Connection 错误 &#39;800a0e7a&#39; 未找到提供程序。该程序可能未正确安装。解决方法!

[问题描述]调试基于ACCESS+ASP的网站程序的时候,遇到如下错误: ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. /Inc/Function.asp,行 9 [原因分析]因为系统是64位的win7或win8.1所以会出现这个问题,解决方法如下: [解决方法]找到IIS应用程序池,“设置应用程序池默认属性”-->“常规”-->”启用 32 位应用程序”,设置为 True即可解决. ADODB.Connection 错误 '800a0e

WORD Application.Documents.Open函数返回null的一种解决方法

DCOM Config Setting for "Microsoft Office Word 97 - 2003 Document" 内部配置一切正常,但Application.Documents.Open函数还是返回null.下面是一个解决方法: "C:\Windows\SysWOW64\config\systemprofile\"目录下创建一个"Desktop"目录. WORD Application.Documents.Open函数返回nu

WebService &quot;因 URL 意外地以 结束,请求格式无法识别&quot; 的解决方法

问题出现的前提条件: 1.使用XMLHttpRequest向服务端发送请求,未正常返回信息 2.使用FireBug发现如标题所描述的问题 解决办法: 在WebConfig->system.web下添加webServices节点,入下所示 <webServices>          <protocols>              <add name= "HttpGet" />               <add name= "

Win8安装程序出现2502、2503错误解决方法

我是在安装VMware virtualbox的时候遇到的这个问题,上网百度了一下发现这是个在win8系统上安装程序时才会遇到的. 究其原因这个问题还是由于权限问题导致的,解决方法如下: 1,ctrl+shift+esc调出任务管理器:注意,这里是用ctrl+shift+esc,而不是用其他方式,具体其他方式是否有效没有试验. 2,在进程中找到资源管理器,右键资源管理器,结束进程:注意,进行到这一步的时候你会发现你的界面消失了,接下来不要惊慌,也不要把任务管理器关掉. 3,资源管理器右上角有一个文

“程序已停止工作”问题的解决方法

问题 遇到一个程序打不开的错误,如图: 问题详细信息如下: 问题签名: 问题事件名称: CLR20r3 问题签名 01: rdh-idss.exe 问题签名 02: 1.0.1.0 问题签名 03: 5510d590 问题签名 04: RDH-IDSS 问题签名 05: 1.0.1.0 问题签名 06: 5510d590 问题签名 07: 92 问题签名 08: 10 问题签名 09: System.BadImageFormatException 解决 1)百度里查找了很多类似的错误,发现弹框总

小程序请求豆瓣API报403解决方法

微信小程序使用wx.request API请求豆瓣公开api的时候,会报一个403(Forbidden)的错误.这是为什么呢?是由于来自小程序的调用过多,豆瓣来自于小程序的调用被禁止.这里收集以下三种方法解决此问题(设置代理): 1.使用 https://douban.uieee.com 2.使用 https://www.zhihu.com/question/265806694/answer/302894881 以上两种方法均是设置代理请求豆瓣API数据. 使用方法:把 https://www.