Recipe 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.
|