2013-02-04 91 views
1

我有一個Windows服務運行一個單獨的後臺線程。在線程內部,它啓動一個使用TcpListener監聽客戶端的TCP服務器。如何使用TcpListener阻止呼叫終止Windows服務

我想知道我可以關閉該服務勇退的時候有一個阻塞讀,像這樣:

listener.AcceptTcpClient(); 

我發現,顯然是一個窗口服務,可以中止任何其他線程,只要因爲它們被設置爲後臺線程,但如果其中一個線程被阻塞呢?這是否有所作爲?如果是這樣,處理這種情況的最佳方法是什麼?

回答

0

最好的方法是打電話給listener.Close()服務的停止事件。它將通過SocketException中止呼叫。

線程狀態(阻塞或正在運行)不影響線程爲背景的事實。因此,如果您從後臺線程調用listener.AcceptTcpClient(),它將在服務停止時仍然中止,

+0

如果我沒有調用listener.Close()會怎麼樣?這不好嗎? – jaffa

+0

@jaffa預期的行爲明智 - 仍然很好。我的答案的最後兩行解釋了這一點。 – Anri