4
A
回答
8
您應該能夠通過關閉TcpListener
中斷調用AcceptTcpClient()
(這將導致被阻擋AcceptTcpClient()
引發異常。您應該不被中止的線程,這通常是一個非常糟糕的想法。所有,但一些非常特殊的情況
這裏有一個簡單的例子:
class Program
{
static void Main(string[] args)
{
var listener = new TcpListener(IPAddress.Any, 12343);
var thread = new Thread(() => AsyncAccept(listener));
thread.Start();
Console.WriteLine("Press enter to stop...");
Console.ReadLine();
Console.WriteLine("Stopping listener...");
listener.Stop();
thread.Join();
}
private static void AsyncAccept(TcpListener listener)
{
listener.Start();
Console.WriteLine("Started listener");
try
{
while (true)
{
using (var client = listener.AcceptTcpClient())
{
Console.WriteLine("Accepted client: {0}", client.Client.RemoteEndPoint);
}
}
}
catch(Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("Listener done");
}
}
上面的代碼開始於一個單獨的線程監聽器,按對T輸入他的控制檯窗口將停止監聽器,等待監聽器線程完成,然後應用程序將正常退出,不需要線程中止!
1
,你可以:
使用BeginAcceptTcpClient()和結束..代替: 參見:https://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.beginaccepttcpclient(v=vs.110).aspx
或者您可以:
創建TcpClient的和發送您的聽衆消息:
因此(我猜你在你的線程中有一個循環):
break the loop其中listener.AcceptTcpClient()正在運行。 (即CancelAsync())和 Loop While(!Tread.CancellationPending);
創建一個TcpClient並向偵聽器發送消息(並丟棄數據); 的TcpClient看到:https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(v=vs.110).aspx
- 現在你的線程可以繼續使用: client.close()和listener.stop()
相關問題
- 1. 在CancellationToken上停止AcceptTcpClient
- 2. 如何使用c中的線程中止程序?
- 3. AppDomain.Unload()如何中止線程?
- 4. 如何中止線程
- 5. 如何在異步方法中使用AcceptTcpClient
- 6. 停止Windows服務等待AcceptTcpClient
- 7. 如何用線程中斷方法停止線程
- 8. 如何終止C++ 11中的線程?
- 9. 如何停止wxpython中的線程?
- 10. 如何停止Android中的線程?
- 11. 如何停止Java中的線程?
- 12. 如何停止oncheckedchanged中的線程?
- 13. 如何停止python中的線程
- 14. 如何停止android中的ASyncTask線程
- 15. 如何阻止Java中的線程
- 16. 如何停止pyobjc中的線程
- 17. 如何停止MFC中的主線程和等待子線程
- 18. 如何停止線程池中的線程
- 19. 如何停止線程?
- 20. 如何停止Java線程?
- 21. 如何停止線程
- 22. 如何停止線程python
- 23. 如何停止Django線程
- 24. 如何終止performSelectorInBackground:線程?
- 25. 如何停止線程?
- 26. 如何終止線程
- 27. 如何停止Java線程?
- 28. 使用openmp並行化中止線程
- 29. 使用C#在Unity3d中停止線程
- 30. 使用橫紗布爾中止線程
從字面上有沒有辦法讓我們在這裏得到任何東西的理解,因爲你沒有提供任何上下文。你已經在另一個線程上運行了嗎? – 2013-04-25 12:20:31
是的,開始在另一個線程中偵聽。 – Halabella 2013-04-25 12:26:23