如何在新线程中构造一个类?

时间:2010-12-29 10:57:19

标签: c# multithreading .net-4.0 console

如何在新线程中构造一个类?我有一个名为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;
    }

    //...
 }

2 个答案:

答案 0 :(得分:2)

好吧,类(对象)不能在特定的线程上运行。只做方法。你在另一个线程上运行构造函数的请求看起来毫无意义。它对其他方法的运行位置和方式没有影响。

在您给出的代码中,看起来新的ClientHandler实例是无根的,即它可能是垃圾收集的。

ClientHandler是否有其他方法?它们可能在另一个线程上运行。

答案 1 :(得分:0)

Async和Threaded不是同义词。如果你想要一个新线程使用一个Threadpool,一个原始的“新线程(Threadstart ...)”显式创建一个,或者查看使用新的任务并行库。