[問題] Socket 待機狀態如何關閉?

看板C_Sharp (C#)作者 (山豬元年革命志士)時間12年前 (2013/07/26 16:54), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
我用執行緒呼叫了一個無窮socket的監聽動作run() _thread = new Thread(new ThreadStart(run)); _thread.Start(); private void run() { try { while (true) { // 接受連線 this.Invoke(new MsgInvoke(AppendMsg), "Wait connecting..."); Socket client = _socket.Accept(); // loop接受資料 while (true) { byte[] data = new byte[1024]; int recv = client.Receive(data); if (recv == 0) break; string msg = Encoding.Default.GetString(data, 0, recv); this.Invoke(new MsgInvoke(AppendMsg), msg); byte[] ack = Encoding.Default.GetBytes("ACK"); client.Send(ack); } client.Close(); } } catch (Exception e) { ... } } 我是用WFA作視窗 有在FormClosing事件加入 _socket.Shutdown(SocketShutdown.Both); _socket.Close(); 或是 Application.Exit(); 都沒辦法讓執行緒斷掉 請問該怎麼可以執行視窗的右上角的X 而不會卡在執行緒死不了這樣 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.78.236

07/26 23:02, , 1F
_thread.Abort() ?!
07/26 23:02, 1F
這個試驗過了 沒有用

07/27 02:22, , 2F
while (!isBreak)
07/27 02:22, 2F
這要執行緒能繼續往下走到判斷while才有用 但目前是卡在 Socket client = _socket.Accept(); 沒辦法往下走

07/27 11:05, , 3F
_thread.Join();
07/27 11:05, 3F
在formclosing事件呼叫 就整個_thread發呆在等待 不知道該怎麼寫 可以給個簡單範例?

07/28 10:33, , 4F
我是在主控台應用程式中使用, 其他程式使用情形不知.
07/28 10:33, 4F

07/28 16:07, , 5F
試試看_thread.IsBackground = true
07/28 16:07, 5F
IsBackground 跟健生中醫一樣有效~ ※ 編輯: Achillean 來自: 122.116.78.236 (07/29 10:44)
文章代碼(AID): #1HyZbB0j (C_Sharp)
文章代碼(AID): #1HyZbB0j (C_Sharp)