2012-08-04 241 views
3

我有一個線程阻塞在Networkstream Read調用。我如何最好地放棄這個線程?我試圖從另一個線程調用Thread.Abort,根據MSDN應該提出一個ThreadAbortException。但是ThreadAbortException在線程中完全不會被引發。但是,當我刪除阻止Read調用,並只讓線程坐在一個循環。做這個的最好方式是什麼?我是否可以同時等待Read調用和事件,以便在發生任何情況時線程解除阻塞?然後,我可以從另一個線程發出該事件的信號。中止阻塞線程

+0

你好,你是否嘗試修改緩衝區大小以避免阻塞。在線程中使用循環和緩衝區大小可以在需要時停止線程;-) – 2012-08-04 11:43:10

+0

如何不首先阻止? – CodesInChaos 2012-08-04 11:44:02

回答

2

Thread.Abort只在線程運行託管代碼時中止,但線程正在等待非託管套接字,因此在套接字解除阻塞之前什麼也沒有發生。

關閉套接字是最好的選擇。

+0

謝謝你這是工作 – PaulK 2012-08-04 12:56:15

3

關閉插座! Read應該拋出一個異常。

+0

謝謝你的工作正常 – PaulK 2012-08-04 12:55:32

1

stream.ReadTimeout = timeout; 
// timeout in ms 

使用

stream.Read(.... 

之前,這將迫使讀超時,並允許沒事的時候會被讀以毫秒爲單位指定超時做一些事情。請參閱MSDN上的Stream::ReadTimeout Propertythis post。 通過這種方式,您可以實現一個只讀指定的超時時間爲的讀取。使用其他同步方法來確定讀數是應該繼續還是應該完成。超時會拋出異常。