using System; using System.Threading; namespace ex_050_002_attendre_un_thread { class Program { static Thread petitThread; static Thread petitThread2; static void Main(string[] args) { Console.WriteLine("\"petit thread\" joue un son pendant 2 secondes,"); Console.WriteLine("\tpuis attend la fin de \"petit thread 2\","); Console.WriteLine("\tpuis affiche PETIT THREAD"); Console.WriteLine("\"petit thread 2\" joue un son pendant 3 secondes,"); Console.WriteLine("\tpuis affiche PETIT THREAD 2"); Console.WriteLine("le thread principal lance les deux petits threads,"); Console.WriteLine("\taffiche leur état,"); Console.WriteLine("\tpuis attend 2,5 secondes"); Console.WriteLine("\taffiche leur état,"); Console.WriteLine("\tpuis attend les deux petits threads"); Console.WriteLine("\tet affiche une dernière fois leur état,"); //crée deux threads petitThread = new Thread(Wait2000); petitThread2 = new Thread(Wait3000); //donner un nom au thread est optionnel mais peut faciliter le débogage petitThread.Name = "petit thread"; petitThread2.Name = "petit thread 2"; PrintThreadsState(petitThread, petitThread2); Console.WriteLine("\"petit thread\" et \"petit thread 2\" démarrent"); //lance les threads petitThread.Start(); petitThread2.Start(); //le code suivant s'exécute en parallèle de Write0 PrintThreadsState(petitThread, petitThread2); Thread.Sleep(2500); Console.WriteLine("2,5 secondes se sont écoulées."); Console.WriteLine("\"petit thread\" est en attente, état : WaitSleepJoin"); Console.WriteLine("\"petit thread 2\" est en cours d'exécution, état : Running"); PrintThreadsState(petitThread, petitThread2); petitThread.Join(); petitThread2.Join(); PrintThreadsState(petitThread, petitThread2); } //méthode qui va être exécutée en parallèle static void Wait2000() { Console.Beep(26000, 2000); petitThread2.Join(); Console.WriteLine("PETIT THREAD"); } //méthode qui va être exécutée en parallèle static void Wait3000() { Console.Beep(26000, 3000); Console.WriteLine("PETIT THREAD 2"); } static void PrintThreadsState(params Thread[] threads) { Console.WriteLine(); Console.WriteLine("état des threads:"); foreach (Thread thread in threads) { Console.WriteLine("\t{0} : {1}", thread.Name, thread.ThreadState); } Console.WriteLine(); } } }