Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 中止阻塞线程_.net_Multithreading - Fatal编程技术网

.net 中止阻塞线程

.net 中止阻塞线程,.net,multithreading,.net,Multithreading,我有一个线程正在阻止NetworkstreamRead调用。如何最好地中止此线程?我尝试从另一个线程调用Thread.Abort,根据MSDN,这会引发ThreadAbortException。但是,线程中根本不会引发ThreadAbortException。然而,当我移除阻塞Read调用并让线程处于循环中时,情况就是这样。最好的方法是什么?我是否可以同时等待Read调用和一个事件,以便在其中一个发生时线程解锁?然后我可以从另一个线程发出该事件的信号。关闭套接字!然后,读取操作将引发异常。线程。

我有一个线程正在阻止Networkstream
Read
调用。如何最好地中止此线程?我尝试从另一个线程调用
Thread.Abort
,根据MSDN,这会引发
ThreadAbortException
。但是,线程中根本不会引发
ThreadAbortException
。然而,当我移除阻塞
Read
调用并让线程处于循环中时,情况就是这样。最好的方法是什么?我是否可以同时等待
Read
调用和一个事件,以便在其中一个发生时线程解锁?然后我可以从另一个线程发出该事件的信号。

关闭套接字!然后,读取操作将引发异常。

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

关闭插座是这里的最佳选择。

Set

stream.ReadTimeout = timeout; 
// timeout in ms
使用前

stream.Read(....
这将强制读取超时,并允许在指定的超时(毫秒)内未读取任何内容时执行某些操作。请参阅MSDN上的或。
通过这种方式,您可以实现只在指定的超时时间内阻塞的读取。使用其他同步方法确定读取是应继续还是应完成线程。超时将引发异常。

您好,是否尝试修改缓冲区大小以避免阻塞。在线程上使用循环和缓冲区大小允许您在需要时停止线程;-)一开始不堵车怎么样?