private void LancerPremier(object sender, RoutedEventArgs e) { Thread t = new Thread(() => { NombrePremier windowPremier = new NombrePremier(premierThreadNumber - 1); windowPremier.NbPremier(); }); t.SetApartmentState(ApartmentState.STA); t.Start(); premierThread.Add(t); premierThreadNumber += 1; UpdataThreadInfo(); }
// Déclenche la création d'un thread 'Premier'. private void Premier_Click(object sender, RoutedEventArgs e) { NombrePremier np = new NombrePremier(); np.FormClosed += (s, ev) => App.Current.Dispatcher.BeginInvoke( new Action(() => Premier_CloseEvent(s, ev))); Thread t = new Thread(() => np.ThreadFunction()); np.threadId = t.ManagedThreadId; t.Name = "Premier"; t.Start(); AddThread(t); }
/* --------------- AUXILIARY FUNCTIONS ---------------- */ // launch a thread with name thread_name, // append it to threads list and refresh table private void launch_thread(string thread_name) { void launch_thread_ball() { WindowBallon b = new WindowBallon(); b.Show(); System.Windows.Threading.Dispatcher.Run(); } void launch_thread_prime() { NombrePremier p = new NombrePremier(); p.CalculatePrimes(); System.Windows.Threading.Dispatcher.Run(); } Thread t = (thread_name == BALL_DLL_NAME) ? new Thread(launch_thread_ball) : new Thread(launch_thread_prime); t.Name = thread_name; // thread must be STA to change UI components t.SetApartmentState(ApartmentState.STA); t.Start(); // add exit callback // t.EnableRaisingEvents = true; // Application.ThreadExit += new EventHandler(child_thread_exited); // t.ThreadExit += new EventHandler(child_thread_exited); // append thread to list threads.Add(t); update_listView(); }
// Récupération de l'ID du thread afin de le supprimer de la liste d'affichage. private void Premier_CloseEvent(object sender, EventArgs e) { NombrePremier np = (NombrePremier)sender; FindDeadThread(np.threadId); }