我在做一个多线程的程序,用C#写的,可是为什么我关闭了所有窗口以后,应用程序还不退出

我在做一个多线程的程序,用C#写的,可是为什么我关闭了所有窗口以后,应用程序还不退出,而要在任务管理器中结束进程呢???

有3个办法,
1. 启动线程时记录所有线程,然后在窗口都退出后结束这些线程
2 将你的线程设置为后台线程(IsBackground = true),这样窗口都退出后这些线程会自动结束。
3 或是来个狠点的 System.Environment.Exit

1. 最好,但代码会有一点多,还有Application .exit 是退出消息泵,关闭窗口的,跟关闭线程没有多大关系。要使用 Environment.Exit追问

System.Environment.Exit,貌似最简单,哪它有什么缺点吗?

追答

System.Environment.Exit 好不好看情况而定。因为大多数情况下程序免不了与读写文件、数据库或是某些资料打交道,而在处理的过程中需要打开文件、读写、关闭。而在这些过程中使用System.Environment.Exit强制进程退出,这样没有机会关闭资源了,而这会造成某些资源文件的损坏,比如数据库损坏、或是文件只写了一半数据进去。而如果是一些纯计算类的工作的话那就不用考虑这些情况了。

追问

哦哦。谢谢啦!。还有第一种方法是使用线程的Abort方法退出吗?还是别的方法?这个具体是怎么退出啊?

追答

Abort也是一个办法,但是他也属于强制结束线程的一种办法,线程可能在工作的过程中被ThreadAbortException异常打断。

一般可以可以使用一个布尔值(比如isStop)表示是否需要中止任务,然后线程在处理工作时去检测isStop ,如果设置为 true 后,结束线程。
当需要结束工作时首先设置isStop=true,然后等待n秒(可使用join())再调用线程的Abort方法,再等待n秒后调用System.Environment.Exit。大致流程是这样,你可以根据实际情况进行调整。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-23
在结束程序的时候,把所有的线程都结束,不然就会出现这种情况追问

网上说用Application.Exit()这个是什么意思,我什么我使用它不行呢?

第2个回答  2012-12-23
当然了,技即使是线程你也要返回来自:求助得到的回答
第2个回答  2012-12-23
这件东西有啥特别之处。”尤里。
相似回答