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.
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); } }
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
.