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