Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共2 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
zhenghangbo 发表于: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楼
有点蓝 发表于:2024/11/26 13:44:00
试试:https://blog.51cto.com/u_15127642/4845422
共2 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .05469 s, 2 queries.