台灣最大程式設計社群網站
線上人數
809
 
會員總數:244534
討論主題:188695
歡迎您免費加入會員
討論區列表 >> VB.NET >> 同名多執行緒如何關閉其中之一
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
同名多執行緒如何關閉其中之一
價值 : 90 QP  點閱數:174 回應數:6

樓主

kib14959
門外漢
0 2
71 5
發送站內信

Private Sub ServerSub()
Dim EP As New IPEndPoint(IPAddress.Parse(TextBox1.Text), TextBox2.Text) '設定Server IP 和 Port
Server = New TcpListener(EP) '建立伺服端監聽器
Server.Start(20) '啟動監聽設定允許最多連線數20人
Do While True '監聽等待客戶要求連線
Client = Server.AcceptSocket '建立此客戶的連線物件Client
Th_Clt = New Thread((AddressOf Listen)) With {
.IsBackground = True '設定為背景執行緒
} '建立監聽這個客戶連線的獨立執行緒
Th_Clt.Start() '開始執行緒的運作
Dim EN As IPEndPoint
EN = Client.RemoteEndPoint
If EN.Address.ToString = TextBox50.Text Then EX10(0) = Th_Clt.ManagedThreadId
If EN.Address.ToString = TextBox51.Text Then EX10(1) = Th_Clt.ManagedThreadId
Loop
End Sub
之後關閉
HT.Remove(TextBox6.Text) '移除使用者名稱為Name的連線物件
ListBox1.Items.Remove(TextBox6.Text) '自上線者名單移除Name
Dim EX12 As String
If TextBox6.Text = TextBox50.Text Then TextBox50.Enabled = True : EX(0) = 0 : EX12 = EX10(0)
If TextBox6.Text = TextBox51.Text Then TextBox51.Enabled = True : EX(1) = 0 : EX12 = EX10(1)
Th_Clt.Abort(EX12) '結束此客戶的監聽執行緒
Client.Close()

請問建立同名的執行緒(最多20個),之後要怎麼指定它其中之一關閉,現在都只能關閉最後連接的執行緒
主要應該是這兩行要怎麼改
Th_Clt.Abort(EX12) '結束此客戶的監聽執行緒
Client.Close()


搜尋相關Tags的文章: [ Abort ] ,
本篇文章發表於2019-05-10 08:39
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

誰是誰
檢舉此回應
你一開始就應該有個資料結構紀錄 Thread 資訊。
本篇文章回覆於2019-05-10 14:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

kib14959
檢舉此回應
請問是要記錄什麼資料才對?我現在記了ManagedThreadId,我會再紀錄name
Th_Clt.Abort(EX12) EX12要帶入那個才會正確。我已經試過ManagedThreadId,有空我會再試name
本篇文章回覆於2019-05-10 14:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

誰是誰
檢舉此回應
要如何能記錄一堆東西 ? 當然是用陣列或集合啊。
本篇文章回覆於2019-05-10 15:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

kib14959
檢舉此回應
您誤會了,我已經有用陣列儲存資料。現在重點是怎樣可以指定我要斷掉的執行緒。以多人聊天室來說,連線者離線通知Server這沒有問題。Server可以主動把其中之一連線者斷開嗎?
本篇文章回覆於2019-05-10 16:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

誰是誰
檢舉此回應
既然有用陣列存起來,那不就是在陣列搜尋到要關掉的Thread 就好了嗎 ?
本篇文章回覆於2019-05-10 18:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

kib14959
檢舉此回應
已測試出來如下
If EN.Address.ToString = TextBox50.Text Then EX10(0) = Client : EX11(0) = Th_Clt
If EN.Address.ToString = TextBox51.Text Then EX10(1) = Client : EX11(1) = Th_Clt

關閉
Dim Sck1 As Socket
Dim Th1 As Thread
If TextBox6.Text = TextBox50.Text Then TextBox50.Enabled = True : EX(0) = 0 : Sck1 = EX10(0) : Th1 = EX11(0)
If TextBox6.Text = TextBox51.Text Then TextBox51.Enabled = True : EX(1) = 0 : Sck1 = EX10(1) : Th1 = EX11(1)
Th1.Abort() '結束此客戶的監聽執行緒
Sck1.Close() '關閉此客戶的連線
本篇文章回覆於2019-05-13 16:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.