C# 关闭主窗口后让所有线程都停止工作
参考资料:http://hi.baidu.com/liusc/blog/item/df822f290206cef498250afe.html
设置线程的IsBackground属性为True
.net 提供了Thread类用于线程的操作。 当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的推出而退出。后台线程不妨碍程序的终止,只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。 【注意】当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。也就是说,当主线程推出的时候,IsBackground=FALSE的线程还会继续执行下去,知道线程执行结束。只有IsBackground=TRUE的线程才会顺着主线程的推出而退出。 static void Main(string[] args) trd[0].Start(); public static void ThreadA() 执行上面的例子可以知道,当主线程显示退出的时候,只要那些IsBackground=TRUE的线程随着主线程一起退出了,而那些IsBackground=FALSE还是需要等到自己执行完成完了之后才会退出。 当主线程不显示推出的时候,结果更是奇怪,就是代码执行到最后,主线程应该算是可以退出了。但是这时候IsBackground=FALSE的线程也不退出。也是要等到执行完成后才退出。 可见,.net中的线程应该是尽量保证所有线程都执行完了后才让整个程序退出。具体是个什么个规则就该去问微软了啊!! |