1

我有一个后台线程的asp.net应用程序。线程在应用程序启动时启动,并在应用程序结束时正常停止。我在共享主机上运行网站。不幸的是,有时应用程序在结束时不会触发Application_End事件。我认为线程会被杀死,但事实并非如此。我目前有4个线程在后台运行。应用程序开始前三次,当前应用程序会话中一次。如何确保在应用程序结束时关闭线程?是否有线程检查应用程序是否已重置或重置了的方法?或者有没有办法在应用程序启动时检查这些流氓线程并杀死它们?提前致谢。如何确保后台线程在应用程序结束时结束?

+0

究竟如何开始你的线程? – 2010-08-12 04:09:22

+0

鉴于应用程序中的某些线程仍在运行,很显然,应用程序并没有“结束”,只有你认为'前景'线程有。如果您为后台任务使用System.Threading.Threads,则可以将它们的IsBackground属性设置为true。 – Ani 2010-08-12 04:12:13

+0

谢谢Ani,我不知道这个属性,我认为这看起来会解决问题。 – Noel 2010-08-13 16:02:55

回答

4

使用ThreadPool.QueueUserWorkItem()在后台执行代码,当AppDomain卸载时将结束代码。我假设你正在使用背景工作,根据标签,我会建议尝试这个。 (考虑加入示例代码绘制出更好的答案。)

管理线程池:http://msdn.microsoft.com/en-us/library/0ka9477y.aspx

前景/背景主题:http://msdn.microsoft.com/en-us/library/h339syd0.aspx

+0

感谢您提供此信息,我不知道托管线程池。从你给我看的例子看来,它看起来像在同一个类的函数上运行线程一样。但我正在使用一个单独的实例化类作为线程。它在这种情况下也能起作用吗?在使用Managed ThreadPool和上面提到的Ani设置IsBackground属性为真之间有什么折衷? – Noel 2010-08-13 16:00:55

+0

另外,您提供的参考状态为“如果您有需要后台处理的短任务,则托管线程池是利用多线程的简单方法。”恐怕情况并非如此,因为我的线程在应用程序的整个生命周期中都将处于活动状态。 – Noel 2010-08-13 16:01:27