作者Achillean (山豬元年革命志士)
看板C_Sharp
標題[問題] Socket 待機狀態如何關閉?
時間Fri Jul 26 16:54:33 2013
我用執行緒呼叫了一個無窮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
1F:推 TeemingVoid:_thread.Abort() ?! 07/26 23:02
這個試驗過了 沒有用
2F:→ ghostx2:while (!isBreak) 07/27 02:22
這要執行緒能繼續往下走到判斷while才有用
但目前是卡在
Socket client = _socket.Accept();
沒辦法往下走
3F:→ ideaup:_thread.Join(); 07/27 11:05
在formclosing事件呼叫
就整個_thread發呆在等待
不知道該怎麼寫
可以給個簡單範例?
4F:推 ideaup:我是在主控台應用程式中使用, 其他程式使用情形不知. 07/28 10:33
5F:→ sweetjp6:試試看_thread.IsBackground = true 07/28 16:07
IsBackground 跟健生中醫一樣有效~
※ 編輯: Achillean 來自: 122.116.78.236 (07/29 10:44)