C#WaitCallBack - ThreadPool

时间:2009-11-23 07:24:47

标签: c# .net multithreading

WaitCallback委托的确切目的是什么?

WaitCallback callback = new WaitCallback(PrintMessage);
ThreadPool.QueueUserWorkItem(callback,"Hello");

static void PrintMessage(object obj)
{
   Console.WriteLine(obj);
}

我可以在“TheadPool”中表示“等待”,直到线程可用为止。一旦可用,执行 目标?

3 个答案:

答案 0 :(得分:9)

在这种情况下,WaitCallback表示一个指向将在线程池中的线程上执行的函数的指针。如果没有可用的线程,它将等待一个线程被释放。

答案 1 :(得分:1)

是的,当线程池线程可用时,您的回调方法会执行。在这个例子中,你可以看到我传递PooledProc作为回调指针。当主线程休眠时调用它。

public static void Main()
    {

        ThreadPool.QueueUserWorkItem(new WaitCallback(PooledProc));
        Console.WriteLine("Main thread");            
        Thread.Sleep(1000);
        Console.WriteLine("Done from Main thread");
        Console.ReadLine();
    }

    // This thread procedure performs the task.
    static void PooledProc(Object stateInfo)
    {         
        Console.WriteLine("Pooled Proc");
    }

显然,QueueUserWorkItem的参数类型是WaitCallback委托类型,如果你检查它,你可能会注意到WaitCallBack的签名是这样的:

public delegate void WaitCallback(object state);

PooledProc方法具有相同的签名,因此我们可以为回调传递相同的内容。

答案 2 :(得分:1)

来自msdn

  

WaitCallback表示要在ThreadPool线程上执行的回调方法。通过将回调方法传递给WaitCallback构造函数来创建委托。

     

通过将WaitCallback委托传递给ThreadPool .. ::。QueueUserWorkItem来将任务排队等待执行。当线程池线程可用时,您的回调方法就会执行。

     

System.Threading.WaitCallBack