Monday, March 19, 2007
C# Using ThreadPool for Multi-Threaded Application

I'm currently designing an application specifically to handle multiple processing at a certain time. I've read all articles about threading, whether to use a background worker, custom thread management, or by using a thread pool. What facinates me is the thread pool, just by passing a workitem viola you have a working multi-threaded application. See simple example below:

using System;
using System.Threading;

public class MyProcess

    private ManualResetEvent _doneEvent;

    public MyProcess(ManualResetEvent doneEvent)
        _doneEvent = doneEvent;

    public void MyProcessThreadPoolCallback(Object threadContext)
        int threadIndex = (int)threadContext;
        Console.WriteLine("thread {0} started...", threadIndex);
        Console.WriteLine("thread {0} end...", threadIndex);

    // Indicates that the process had been completed

    public void StartProcess()
        // TODO: Add code for processing here



public class ThreadPoolExample
    static void Main()
        const int totalCountToProcess = 10;
        ManualResetEvent[] doneEvents = new ManualResetEvent[totalCountToProcess];
        MyProcess[] MyProcessArray = new MyProcess[totalCountToProcess];
        // Configure and launch threads using ThreadPool:
        Console.WriteLine("launching tasks...");
        for (int i = 0; i < totalCountToProcess ; i++)
            doneEvents[i] = new ManualResetEvent(false);
            MyProcess p = new MyProcess(doneEvents[i]);
            MyProcess[i] = p;
            ThreadPool.QueueUserWorkItem(p.MyProcessThreadPoolCallback, i);

        // Wait for all threads in pool to finished processing

        Console.WriteLine("All Process are complete.");


posted @ Monday, March 19, 2007 1:01 PM | Feedback (2)