C# 中止线程+;插座连接
我有一个(我认为是非常基本的理解)关于线程和中止的问题: 情况是:我在一个线程中有一个打开的套接字连接-现在我正在通过C# 中止线程+;插座连接,c#,multithreading,sockets,dispose,C#,Multithreading,Sockets,Dispose,我有一个(我认为是非常基本的理解)关于线程和中止的问题: 情况是:我在一个线程中有一个打开的套接字连接-现在我正在通过thread.Abort()中止该线程 问题是:套接字连接会发生什么变化?它会被关闭和处理吗?还是我必须自己处理 附件: 线程在此处创建: foreach (Pcd pcd in LstPcds) { Thread.Sleep(delay); Thread thread = new Thread(pcd.Simulate
thread.Abort()
中止该线程
问题是:套接字连接会发生什么变化?它会被关闭和处理吗?还是我必须自己处理
附件:
线程在此处创建:
foreach (Pcd pcd in LstPcds)
{
Thread.Sleep(delay);
Thread thread = new Thread(pcd.Simulate);
_lstActiveThreads.Add(thread);
thread.IsBackground = true;
thread.Name = pcd.ToString();
thread.Start();
count++;
}
并应在此处进行处置/中止/任何操作:
public void DisposePcds()
{
try
{
foreach (Thread thread in _lstActiveThreads)
{
thread.Abort();
}
}
catch (Exception exception)
{
MessageBox.Show(exception.ToString());
}
}
每个线程
都有一个打开的套接字
连接,如下所示:
// connecting (async) to the service
// blocks the thread until connection is established
ConnectionSocket = new Socket(_ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
ConnectionSocket.BeginConnect(_ipEndPoint, ConnectCallback, ConnectionSocket);
_manualConnectEvent.WaitOne();
// begin receive data from the server
ReceiveDto receive = new ReceiveDto { Socket = ConnectionSocket };
ConnectionSocket.BeginReceive(receive.Buffer, 0, ReceiveDto.GetBufferSize(), 0, ReceiveCallback, receive);
加上一个计时器及其经过的事件,其中每个套接字
发送一个字节数组:
byte[] request = GetRegisterRequestCommand(bank);
ConnectionSocket.Send(request, SocketFlags.None);
只需阅读有关此主题的MSDN文档 首先。不,你的代码永远不会工作。Disposables需要显式地调用
.Dispose()
,或者使用(IDisposable){}通过的语法糖隐式地调用
现在看一下ThreadAbortException
,您可以捕获异常(但它会被重新捕获)。因此,使用
(编译器将其转换为try{}最后{Dispose()}
)将起作用
但是您没有异常处理。永远不要使用Thread.Abort()
。真正地很少有正当的理由使用它。您应该使用一种机制(如AutoResetEvent
等)来允许线程正确关闭自己。您能告诉我们中止线程并关闭连接的部分吗?不清楚您的线程是在哪里创建的?堕胎时你的线程在做什么?看起来您正在使用套接字的异步API。没有充分的理由使用线程,我也不这么认为。您在何处创建线程以及它的作用是什么?Thread.Abort
是不可预测的,在这种可管理的情况下应该避免。看看您如何使用TPL来执行。正如@SriramSakthivel所说的。你不需要穿线。您可以在所有单线程异步情况下执行此操作。谢谢aron-我知道这段代码在我们的任何领域都不起作用,但实际上这并不是一个“真实”场景的问题,只是我对“处理”线程及其内部操作的工作方式缺乏了解。