O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

15.7. Waiting for Worker Thread Completion

Problem

You have two threads currently running in your application. You need the main thread to wait until the worker thread has completed its processing. This ability comes in handy when your application is monitoring activities amongst multiple threads and you don’t want your main application thread to terminate until all of the workers are done processing.

Solution

Use the Thread.Join method to detect when a thread terminates:

class Worker
{
    static void Main( )
    {
        Run( );
    }

    static void Run( )
    {
        Thread worker = new Thread(new ThreadStart(WorkerThreadProc));
        worker.Start( );
        if(worker.Join(4000))
        {
            // worker thread ended ok
            Console.WriteLine("Worker Thread finished");
        }
        else
        {
            // timed out
            Console.WriteLine("Worker Thread timed out");
        }
    }

    static void WorkerThreadProc( )
    {
        Thread.Sleep(2000);
    }
}

Discussion

In the Worker class shown previously, the Run method starts off running in the context of the main thread. It then launches a worker thread; it then calls Join on it with a timeout set to four seconds. Since we know that the worker thread should not run for more than two seconds (see WorkerThreadProc), this should be sufficient time to see the worker thread terminate and for the main thread to finish and terminate in an orderly fashion.

It is very important to call Join only after the worker thread has been started, or you will get a ThreadStateException .

See Also

See the “Thread.Join Method” topic in the MSDN documentation.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required