Application.Exit()结束程序,但线程还在的解决方法。
来源:互联网 发布:程序员证书有用吗 编辑:程序博客网 时间:2024/05/02 17:28
出现此情况大多原因是使用了多线程编程,或者你所调用的dll使用了多线程。
我们知道,一般情况下的线程执行完指定的任务之后是会关闭了的,但是如果对于一些循环类线程,或者忘记关掉的线程时,这个时候就需要我们手动将之强制关闭。
用以下三个中的一个即可尝试强制关闭线程。
但是这些方法都是强制关闭,那么我们如何使用Application.Exit();正常的关闭整个程序呢?
这个时候我们要引用下微软对Application.Exit();的解释了:
我们看的非常清楚,停止在所有线程上运行的所有消息循环,既然是所有,那又为何关闭不掉呢?这里我们要搞清楚一点的就是,新开的进程属于另一个domain(域),你要搞清楚的是进程不等于线程,application.exit();是关闭当前进程的所有线程,不能关闭它创建的进程。新进程和本进程无任何关系。
所以,我们可以这样理解Application.Exit();
所以,我们要想在当前进程上使用Application.Exit();关闭其他进程,就要把其他的进程设置为当前进程的后台进程(IsBackground),而当在主线程中创建了一个线程时,那么该线程的IsBackground默认是设置为FALSE的。当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。只有IsBackground=TRUE的线程才会随着主线程的退出而退出。当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的退出而退出。
因此我们在创建完进程之后要在后面加上一句:
然后它才可以被当前进程所控制,然后才可以用Application.Exit();结束。
本文由洗白白丶首发于51cto--.Net论坛,转载请保留此段文字说明。
http://bbs.51cto.com/thread-970057-1.html
- Application.Exit()结束程序,但线程还在的解决方法。
- Application.Exit()退出应用程序但在资源管理器中还能看到
- Application.Exit()并不是在什么地方都能终止程序的运行
- 一篇在程序还未结束运行时就能把自身删除的文章(2千字)
- 多线程编程程序关闭了,但进程还在的解决方案
- winform子窗体中,Application.Exit()不起作用的解决方法。
- 想在另一个Activity里打开这个Activity,但这之前的原来那个Activity还存在,结束掉那个Activity
- 在数据库中sql查询很快,但在程序中查询较慢的解决方法
- 控制台程序运行结束后闪退的解决方法
- 还未结束就能把自身删除的程序
- 获取线程结束代码(Exit Code)
- 扩展屏幕没有连接,但程序窗口还在扩展屏幕上,在看不到这个屏幕的情况下,把程序窗口拉回来的方法
- 结束程序函数exit、 _exit、 atexit区别
- Application.Exit和Environment.Exit的区别
- spark任务已经执行结束,但还显示RUNNING状态
- 在外部结束线程
- 为何Application.Exit()无法真正退出程序
- Application.Exit()为什么没有退出程序?
- 异常
- mysql 查询缓存
- uboot - 环境变量的同步
- POJ 2686 Traveling by Stagecoach(状压DP)
- JSP学习过程中错误整理
- Application.Exit()结束程序,但线程还在的解决方法。
- 机器学习-二叉决策树
- java学习经历----常用日期类 Date及其解析
- 免费VPN(程序猿们的VPN)
- 信号量, 互斥量,自旋锁
- 自定义View流程解析
- Java中如何利用JDK编译和运行应用程序?
- 并查集的结题报告
- (Java)LeetCode-306. Additive Number