Application.Exit()结束程序,但线程还在的解决方法
2017-02-08 09:48
429 查看
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();结束。
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();结束。
相关文章推荐
- Application.Exit()结束程序,但线程还在的解决方法。
- Application.Exit()结束程序,但线程还在的解决方法。
- Application.Exit()结束程序,但线程还在的解决方法
- 关于无法定位程序输入点_glutInitWithExit于动态链接库glut32.dll上的解决方法
- VC++/VS2010 Win32控制台程序 运行结束 DOS/dos窗口立刻消失/一闪而过 的解决方法整理
- 程序界面假死的一种解决方法 - 线程
- linux结束程序内存不会马上释放的解决方法
- Eclipse RCP程序发布后提示找不到application id的问题和解决方法
- c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);
- 程序中和有js函数的网页交互,线程中调用 get_Script 就会错误的解决方法,由于COM的线程安全问题
- 友盟分享中新浪分享回调时程序崩溃的解决方法 application cannot be case to android.app.Activity
- 无法定位程序输入点_glutInitWithExit于动态链接库glut32.dll上的解决方法
- vs 2008 调试的时候,任务管理器进程会有个*你的程序名.vshost.exe类似的进程结束不了的解决方法
- winform子窗体中,Application.Exit()不起作用的解决方法。
- VC++/VS2010 Win32控制台程序 运行结束 DOS/dos窗口立刻消失/一闪而过 的解决方法整理
- 子线程中CApplication::CreateDispatch失败的解决方法
- 【Delphi学习】运行程序后闪一下就结束的解决方法
- 控制台程序运行结束后闪退的解决方法
- VS2010 Win32控制台程序 运行结束 DOS/dos窗口立刻消失/一闪而过 的解决方法整理