如何关闭Windows Service应用程序的所有后台线程

本文关键字:后台 线程 应用程序 何关闭 Windows Service | 更新日期: 2023-09-27 18:19:08

我创建了一个windows服务应用程序,我打开了大约10000个线程,我想关闭所有线程,就像我关闭winform应用程序时关闭所有后台线程一样,我怎么才能做到这一点?我不想在数组中存储所有这些线程的引用,并使用循环关闭所有线程。

在我使用Winform应用程序之前,当我关闭Winform应用程序时,所有的后台线程都会关闭。我想完成这样的事情,关闭所有的线程在Windows服务应用程序

有任何想法都将非常感激。

如何关闭Windows Service应用程序的所有后台线程

如果你设置了线程属性myThread.isBackground = true,该线程将会死亡,因为所有前台线程都被杀死(当你关闭应用程序时)。

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

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

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

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

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

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

如果你只是处理停止消息,不做任何其他事情,操作系统应该在大约20秒后停止服务进程中所有剩余的线程。