【发布时间】:2011-01-23 03:42:11
【问题描述】:
我实现了一个 TCP 客户端,它使用一个线程打开一个到服务器的套接字并以同步的方式从中读取数据。
当 String thisLine = aReadStream.ReadLine(); 行阻塞时,因为没有数据可以从套接字读取,我尝试执行 Thread.Abort 来杀死线程(因为它在 ReadLine() 上被阻塞)我希望能够捕捉到 @ 987654323@ 但是我不能。
线程在ReadLine() 上仍然被阻塞,并且没有被杀死。
在我在线程中使用的代码下方。
你知道为什么我做错了什么,以及如何解除对 ReadLine() 的阻塞吗?
私有无效 readSocket_andTriggerEvents() { TcpClient aClient = null; 尝试 { aClient = new TcpClient(); aClient.Connect(_HOST, _PORT); Trace.WriteLine("套接字连接"); NetworkStream aStream = aClient.GetStream(); StreamReader aReadStream = new StreamReader(aStream); int nTimes = 0; 而(this.isSocketThreadStarted) { 字符串 thisLine = aReadStream.ReadLine(); // 当没有数据时 // 可用应用程序挂在这里。 // Thread.Abort 不起作用! } } 捕获(ThreadAbortException ex) { Trace.WriteLine("线程被暴力杀死"); // 我从来没有来过这里!! } 捕捉(SocketException ex) { Helper.ShowErrorMessage(ex); } 最后{ aClient.Close(); Trace.WriteLine("套接字关闭"); } }【问题讨论】:
-
关闭套接字以获取来自另一个线程的输入。这将导致读取遇到流结束,因此应该关闭套接字并退出线程,