如何关闭Windows服务应用程序的所有后台线程?

时间:2013-06-20 13:33:26

标签: c# multithreading windows-services

我已经创建了一个Windows服务应用程序,在我打开大约10000个线程时,我想关闭所有线程,就像关闭winform应用程序时所有后台线程都关闭一样,我该如何实现?我不想存储对数组中所有这些线程的引用,并通过使用循环来关闭所有线程。

在我使用Winform应用程序之前,当我关闭winform应用程序时,所有背景线程都会自行关闭。我想完成这样的事情来关闭Windows服务应用程序中的所有线程

任何想法都将非常感激。

3 个答案:

答案 0 :(得分:3)

如果设置了线程属性myThread.isBackground = true,则线程将在所有前台线程被终止时死掉(当您关闭应用程序时)。

然而,创建10000个线程并不是一件好事,因为操作系统将花费更多时间在线程之间切换而不是实际执行线程代码。在普通计算机上执行那么多线程实际上比在2-4核CPU上执行2-16个线程(例如)效率低。

这是一本关于线程的优秀电子书。

PDF:http://www.albahari.info/threading/threading.pdf 网址:http://www.albahari.com/threading/

答案 1 :(得分:-1)

我可以看到实现目标的两个选项:

  1. 让您的服务应用程序启动另一个负责启动线程的可执行程序。然后让您的服务应用程序在需要时终止该可执行程序。由可执行程序生成的线程将被终止但不会被服务。

  2. 在正在运行的线程中设置中断条件。通过设置布尔标志,您可以让线程退出while (true)并退出Runnable委托。 (这里我假设你的帖子一直在while (true)中运行,否则你不会问这个问题。

答案 2 :(得分:-2)

如果您只是处理停止消息而不执行任何其他操作,操作系统应在约20秒后停止服务进程中的所有剩余线程。