如何在新线程中构造一个类?我有一个名为Server的静态类和一个名为ClientHandler的非静态类。我想在新的Thread中运行新的ClientHandler实例的构造函数。构造函数有两个参数。我尝试了多种方法,但我的进程'线程数不会增加。代码片段如下:
public static class Server
{
//...
public static void AcceptConnection(IAsyncResult iar)
{
var oldserver = (Socket) iar.AsyncState;
var client = oldserver.EndAccept(iar);
Console.WriteLine("Client [{0}] connected from {1}.", CHandlerIndex, client.RemoteEndPoint.ToString());
new ClientHandler(client, CHandlerIndex); //This has to run in a new thread.
CHandlerIndex++;
ServerSocket.BeginAccept(new AsyncCallback(AcceptConnection), ServerSocket);
}
}
public class ClientHandler
{
private readonly Socket _client;
private readonly Parser _pParser;
public Security S;
public int ClientIndex;
//...
public ClientHandler(Socket cSocket, int cI)
{
_client = cSocket;
InitSecurity();
_pParser = new Parser(this);
ClientIndex = cI;
}
//...
}
答案 0 :(得分:2)
好吧,类(对象)不能在特定的线程上运行。只做方法。你在另一个线程上运行构造函数的请求看起来毫无意义。它对其他方法的运行位置和方式没有影响。
在您给出的代码中,看起来新的ClientHandler实例是无根的,即它可能是垃圾收集的。
ClientHandler是否有其他方法?它们可能在另一个线程上运行。
答案 1 :(得分:0)
Async和Threaded不是同义词。如果你想要一个新线程使用一个Threadpool,一个原始的“新线程(Threadstart ...)”显式创建一个,或者查看使用新的任务并行库。