WaitCallback委托的确切目的是什么?
WaitCallback callback = new WaitCallback(PrintMessage);
ThreadPool.QueueUserWorkItem(callback,"Hello");
static void PrintMessage(object obj)
{
Console.WriteLine(obj);
}
我可以在“TheadPool”中表示“等待”,直到线程可用为止。一旦可用,执行 目标?
答案 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来将任务排队等待执行。当线程池线程可用时,您的回调方法就会执行。