Use the QueueUserWorkItem method to queue a task and supply the data for the task. : ThreadPool « Thread « C# / CSharp Tutorial

using System;
using System.Threading;

public class MyValue {
    public string MyString;
    public int Value;

    public MyValue(string text, int number) {
        MyString = text;
        Value = number;

public class Example {
    public static void Main() {
        MyValue ti = new MyValue("{0}", 42);
        if (ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc), ti)) {    
            Console.WriteLine("Main thread exits.");
        else {
            Console.WriteLine("Unable to queue ThreadPool request."); 
    static void ThreadProc(Object stateInfo) {
        MyValue ti = (MyValue) stateInfo;
        Console.WriteLine(ti.MyString, ti.Value); 

20.28.1.Thread Pool Example
20.28.2.Use ThreadPool
20.28.3.Using the thread pool and no arguments
20.28.4.Using the thread pool and providing an argument
20.28.5.Use ThreadPool to implement a hello server
20.28.6.Use the system thread pool
20.28.7.Registering wait callbacks for events
20.28.8.Available worker/IO threads
20.28.9.Max worker/IO threads in a ThreadPool
20.28.10.Min worker/IO threads in a ThreadPool
20.28.11.Scheduling work to occur on the thread-pool
20.28.12.ThreadPool Demo
20.28.13.Using ThreadPool Instead of Instantiating Threads Explicitly
20.28.14.Queuing a task for execution by ThreadPool threads, with the RegisterWaitForSingleObject method.
20.28.15.QueueUserWorkItem and RegisterWaitForSingleObject: Queue a task, represented by the ThreadProc method, using the QueueUserWorkItem method.
20.28.16.Canceling a queued task with RegisteredWaitHandle.
20.28.17.Use the QueueUserWorkItem method to queue a task and supply the data for the task.