In multithreaded .NET programming, what are the decision criteria for using ThreadPool.QueueUserWorkItem versus starting my own thread via new Thread() and Thread.Start()?
If your tasks are short you will most likely see much better performance by scheduling tasks on the thread pool via QueueUserWorkItem or BeginInvoke as you avoid the repeated cost of creating and destroying your own threads.
The thread pool obviously pays for creating threads as well, but it reuses the threads, so you don't pay the cost per task.
You may also want to take a look at Threading in C# (free ebook).