C# 如何中止内部使用AcceptTcpClient()的线程?
C# 如何中止内部使用AcceptTcpClient()的线程?,c#,C#,acceptcpclient()防止在我调用thrd.Abort()后退出应用程序 如何在侦听时退出应用程序?您应该能够通过关闭TcpListener来中断对AcceptTcpClient()的调用(这将导致阻塞AcceptTcpClient()引发异常)。您不应该中止线程,这通常是一个非常糟糕的主意,但在一些非常特殊的情况下除外 下面是一个简单的例子: class Program { static void Main(string[] args) { var l
acceptcpclient()
防止在我调用thrd.Abort()后退出应用程序
如何在侦听时退出应用程序?您应该能够通过关闭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");
}
}
上面的代码在单独的线程上启动侦听器,在控制台窗口上按Enter键将停止侦听器,等待侦听器线程完成,然后应用程序将正常退出,不需要线程中止!您可以:
使用BeginAcceptTcpClient()和End..代替:
见:
或者你可以:
创建TCP客户端并发送侦听器消息:
因此(我猜您的线程中有一个循环):
- 中断listener.AcceptCpcClient()正在运行的循环。
(即CancelAsync())从外部和
循环时(!Tread.CancellationPending)
- 创建TcpClient并向侦听器发送消息(并丢弃数据);
TCP客户端请参阅:
- 现在,您的线程可以继续执行以下操作:
client.close()和listener.stop()
由于您没有提供上下文,我们根本无法理解这里的任何内容。您已经在另一个线程上运行了吗?是的,开始在另一个线程中侦听。