中止阻塞线程

时间:2012-08-04 11:32:48

标签: .net multithreading

我有一个在Networkstream Read调用时阻塞的线程。我如何最好地中止这个帖子?我尝试在另一个线程的线程上调用Thread.Abort,根据MSDN,该线程应该引发ThreadAbortException。但是,线程中根本没有引发ThreadAbortException。但是,当我删除阻塞Read调用并让线程处于循环中时。做这个的最好方式是什么?我可以同时等待Read调用和一个事件,以便线程解除阻塞吗?然后我可以从另一个线程发出该事件的信号。

3 个答案:

答案 0 :(得分:3)

关闭插座!然后,Read应抛出异常。

答案 1 :(得分:2)

Thread.Abort仅在线程运行托管代码时中止,但您的线程正在等待非托管套接字,因此在套接字解除阻塞之前不会发生任何事情。

关闭套接字是最好的选择。

答案 2 :(得分:1)

stream.ReadTimeout = timeout; 
// timeout in ms

之前使用

stream.Read(....

这会强制读取超时并允许在没有为指定的超时读取任何内容时执行某些操作(以毫秒为单位)。在MSDN上查看Stream::ReadTimeout Propertythis post。 这样,您就可以实现只对指定的超时进行阻塞的读取。使用其他同步方法来确定读取是继续还是线程应该完成。超时将引发异常。