C# 如何在新线程中构造类?
如何在新线程中构造类?我有一个名为Server的静态类和一个名为ClientHandler的非静态类。我想在新线程中运行新ClientHandler实例的构造函数。构造函数接受2个参数。我尝试了多种方法,但进程的线程数没有增加。下面是一段代码片段:C# 如何在新线程中构造类?,c#,multithreading,.net-4.0,console,C#,Multithreading,.net 4.0,Console,如何在新线程中构造类?我有一个名为Server的静态类和一个名为ClientHandler的非静态类。我想在新线程中运行新ClientHandler实例的构造函数。构造函数接受2个参数。我尝试了多种方法,但进程的线程数没有增加。下面是一段代码片段: public static class Server { //... public static void AcceptConnection(IAsyncResult iar) { var oldserver
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;
}
//...
}
好吧,类(对象)不会在特定的线程上运行。只有方法可以。在另一个线程上运行构造函数的请求看起来毫无意义。它不会影响其他方法在何处/如何运行
在您给出的代码中,新的ClientHandler实例看起来是无根的,即它可以被垃圾收集
ClientHandler还有其他方法吗?它们可能在另一个线程上运行 异步和线程不是同义词。如果您想要一个新线程,请显式地使用线程池、原始的“新线程(Threadstart…)”创建一个线程,或者查看使用新的任务并行库 我知道对象不会(在特定线程上)运行。我的问题是如何在另一个线程中运行新对象的构造函数。我的想法是为每个ClientHandler实例提供一个线程,用于它的所有方法(从构造函数开始)。是的,ClientHandler还有其他方法。(发送、接收、InitSecurity等)我认为您需要一些方法,而不是ctor,它在线程上运行处理/等待。处理/等待什么?线程还是套接字的函数?为什么说异步和线程不一样?我从来没有说过它们是。这不是我问题的直接答案。事实上,你有两个答案都告诉你自己创建线程。这里有一个教程。如果您的问题是构造函数变量,请在问题中更加明确。您不需要使用“ParameterizedThreadStart”并创建一个类来包装参数(对象数组就可以了)。