Foxtable(狐表)用户栏目专家坐堂 → TCP连接,阻塞式的怎么停止线程?


  共有24人关注过本帖树形打印复制链接

主题:TCP连接,阻塞式的怎么停止线程?

帅哥哟,离线,有人找我吗?
zhenghangbo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:478 积分:4585 威望:0 精华:0 注册:2018/2/7 14:30:00
TCP连接,阻塞式的怎么停止线程?  发帖心情 Post By:2024/11/26 13:35:00 [只看该作者]

下面的代码是在全局代码中的,其中标红的是阻塞式的,如果没有客户端连接他会一直等。如何启动线程后,一直没等到客户端,但是又要停止线程?

Public  Sub getData()
Dim ip As String = forms("Mainform").Controls("ip").text
Dim ipAddress As System.Net.IPAddress = System.Net.IPAddress.Parse(ip)
Dim port As Integer = 8081
Dim listener As New System.Net.Sockets.TcpListener(ipAddress, port)
listener.Start()
Dim clients As New System.Collections.Concurrent.ConcurrentDictionary(Of String, System.Net.Sockets.NetworkStream) ' 存储已连接的客户端及其网络流
Try
    Do While True       
     '' 等待客户端连接,阻塞式的,如何停止
        Dim client As System.Net.Sockets.TcpClient = listener.AcceptTcpClient()
        '
        ........
        .......
        
        client.Close()
    Loop
End Sub)
acceptThread.Start()

Catch ex As Exception
    Forms("Mainform").Controls("TextBox_log").text=   Forms("Mainform").Controls("TextBox_log").text & vbcrlf &  "Error: " & ex.Message
Finally
    
    ' 确保监听器被关闭
    listener.Stop()
    
End Try
End Sub





线程启动代码
Dim newthread As New System.Threading.Thread(AddressOf GetData)
vars("newthread") = newthread
newthread.IsBackground = True
newthread.Start()


停止线程代码,一执行这个代码整个foxtable程序就卡死了,因为那个阻塞的代码一直在等待。
If vars("newthread") IsNot Nothing Then
stoprfid = False ' 设置停止标志
    vars("newthread").Abort
    vars("newthread").Join() ' 等待线程结束
End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110809 积分:563983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/11/26 13:44:00 [只看该作者]


 回到顶部