[ Team LiB ] |
Recipe 15.7 Waiting for Worker Thread CompletionProblemYou 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. SolutionUse 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); } } DiscussionIn 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 AlsoSee the "Thread.Join Method" topic in the MSDN documentation. |
[ Team LiB ] |