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

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

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

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

但是这些方法都是强制关闭,那么我们如何使用Application.Exit();正常的关闭整个程序呢?

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

我们看的非常清楚,停止在所有线程上运行的所有消息循环,既然是所有,那又为何关闭不掉呢?这里我们要搞清楚一点的就是,新开的进程属于另一个domain(域),你要搞清楚的是进程不等于线程,application.exit();是关闭当前进程的所有线程,不能关闭它创建的进程。新进程和本进程无任何关系。
所以,我们可以这样理解Application.Exit();所以,我们要想在当前进程上使用Application.Exit();关闭其他进程,就要把其他的进程设置为当前进程的后台进程(IsBackground),而当在主线程中创建了一个线程时,那么该线程的IsBackground默认是设置为FALSE的。当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。只有IsBackground=TRUE的线程才会随着主线程的退出而退出。当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。

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

转载于:https://www.cnblogs.com/zxbzl/p/6376780.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>