Utilisation des threads et du threadingUsing threads and threading

Avec .NET, vous pouvez écrire des applications qui effectuent plusieurs opérations en même temps.With .NET, you can write applications that perform multiple operations at the same time. Les opérations présentant le risque d’accaparer les ressources d’autres opérations peuvent s’exécuter sur des threads distincts : ce processus est appelé multithreading ou threading libre.Operations with the potential of holding up other operations can execute on separate threads, a process known as multithreading or free threading.

Les applications qui utilisent le multithreading sont plus réactives aux entrées utilisateur, car l’interface utilisateur reste active pendant que les tâches sollicitant beaucoup le processeur s’exécutent sur des threads distincts.Applications that use multithreading are more responsive to user input because the user interface stays active as processor-intensive tasks execute on separate threads. Le multithreading est également utile quand vous créez des applications scalables, car vous pouvez ajouter des threads au fil de l’augmentation de la charge de travail.Multithreading is also useful when you create scalable applications, because you can add threads as the workload increases.

Notes

Si vous avez besoin de plus de contrôle sur le comportement des threads de l’application, vous pouvez gérer vous-même les threads.If you need more control over the behavior of the application's threads, you can manage the threads yourself. Toutefois, à compter de .NET Framework 4, la programmation multithread est considérablement simplifiée avec les classes System.Threading.Tasks.Parallel et System.Threading.Tasks.Task, Parallel LINQ (PLINQ), de nouvelles classes de collections simultanées dans l’espace de noms System.Collections.Concurrent, et un nouveau modèle de programmation basé sur le concept de tâches plutôt que de threads.However, starting with the .NET Framework 4, multithreaded programming is greatly simplified with the System.Threading.Tasks.Parallel and System.Threading.Tasks.Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. Pour plus d’informations, consultez Programmation parallèle et Bibliothèque parallèle de tâches (TPL).For more information, see Parallel Programming and Task Parallel Library (TPL).

Comment créer et démarrer un nouveau threadHow to: Create and start a new thread

Pour créer un thread, vous devez créer une instance de la classe System.Threading.Thread et fournir au constructeur le nom de la méthode que vous souhaitez exécuter sur un nouveau thread.You create a new thread by creating a new instance of the System.Threading.Thread class and providing the name of the method that you want to execute on a new thread to the constructor. Pour démarrer un thread créé, appelez la méthode Thread.Start.To start a created thread, call the Thread.Start method. Pour plus d’informations et pour obtenir des exemples, consultez l’article Création de threads et passage de données au démarrage et la référence de l’API Thread.For more information and examples, see the Creating threads and passing data at start time article and the Thread API reference.

Comment arrêter un threadHow to: Stop a thread

Pour mettre fin à l’exécution d’un thread, utilisez l' System.Threading.CancellationToken.To terminate the execution of a thread, use the System.Threading.CancellationToken. Il offre un moyen unifié d’arrêter les threads de manière coopérative.It provides a unified way to stop threads cooperatively. Pour plus d’informations, consultez Annulation dans les threads managés.For more information, see Cancellation in managed threads.

Parfois, il n’est pas possible d’arrêter un thread de manière coopérative, car il exécute du code tiers non conçu pour l’annulation coopérative.Sometimes it is not possible to stop a thread cooperatively, because it runs third-party code not designed for cooperative cancellation. Dans ce cas, vous souhaiterez peut-être mettre fin à l’exécution de force.In this case, you might want to terminate its execution forcibly. Pour mettre fin à l’exécution d’un thread de force, dans .NET Framework vous pouvez utiliser la méthode Thread.Abort.To terminate the execution of a thread forcibly, in .NET Framework you can use the Thread.Abort method. Cette méthode lève une ThreadAbortException sur le thread sur lequel elle est appelée.That method raises a ThreadAbortException on the thread on which it's invoked. Pour plus d’informations, consultez Destruction de threads.For more information, see Destroying threads. La méthode Thread.Abort n’est pas prise en charge dans .NET Core.The Thread.Abort method is not supported in .NET Core. Si vous devez mettre fin à l’exécution de code tiers de force dans .NET Core, exécutez-le dans le processus distinct et utilisez Process.Kill.If you need to terminate the execution of third-party code forcibly in .NET Core, run it in the separate process and use Process.Kill.

Le System.Threading.CancellationToken n’est pas disponible avant .NET Framework 4.The System.Threading.CancellationToken is not available before .NET Framework 4. Pour arrêter un thread dans les anciennes versions de .NET Framework, vous devez implémenter l’annulation coopérative manuellement à l’aide des techniques de synchronisation de threads.To stop a thread in older .NET Framework versions, you should implement the cooperative cancellation manually using the thread synchronization techniques. Par exemple, vous pouvez créer le champ booléen volatile shouldStop et l’utiliser pour demander l’arrêt du code exécuté par le thread.For example, you can create the volatile boolean field shouldStop and use it to request the code executed by the thread to stop. Pour plus d’informations, consultez volatile in C# Reference et System.Threading.Volatile.For more information, see volatile in C# Reference and System.Threading.Volatile.

Utilisez la méthode Thread.Join pour que le thread appelant attende la fin du thread en cours d’arrêt.Use the Thread.Join method to make the calling thread wait for the termination of the thread being stopped.

Comment suspendre ou interrompre un threadHow to: Pause or interrupt a thread

Vous utilisez la méthode Thread.Sleep pour suspendre le thread actif pendant un certain laps de temps.You use the Thread.Sleep method to pause the current thread for a specified amount of time. Vous pouvez interrompre un thread bloqué en appelant la méthode Thread.Interrupt.You can interrupt a blocked thread by calling the Thread.Interrupt method. Pour plus d’informations, consultez Suspension et interruption de threads.For more information, see Pausing and interrupting threads.

Propriétés du threadThread properties

Le tableau suivant présente certaines des propriétés de Thread :The following table presents some of the Thread properties:

LesProperty DescriptionDescription
IsAlive Retourne true si un thread a été démarré et ne s’est pas encore arrêté normalement ou n’a pas été abandonné.Returns true if a thread has been started and has not yet terminated normally or aborted.
IsBackground Obtient ou définit une valeur booléenne qui indique si un thread est un thread d’arrière-plan.Gets or sets a Boolean that indicates if a thread is a background thread. Les threads d’arrière-plan ressemblent aux threads de premier plan, mais un thread d’arrière-plan n’empêche pas un processus de s’arrêter.Background threads are like foreground threads, but a background thread doesn't prevent a process from stopping. Une fois que tous les threads de premier plan appartenant à un processus sont arrêtés, le common language runtime met fin au processus en appelant la méthode Abort sur les threads d’arrière-plan encore actifs.Once all foreground threads that belong to a process have stopped, the common language runtime ends the process by calling the Abort method on background threads that are still alive. Pour plus d’informations, consultez Threads de premier plan et d’arrière-plan.For more information, see Foreground and Background Threads.
Name Obtient ou définit le nom d’un thread.Gets or sets the name of a thread. Généralement utilisé pour découvrir des threads individuels lors du débogage.Most frequently used to discover individual threads when you debug.
Priority Obtient ou définit une valeur ThreadPriority utilisée par le système d’exploitation pour classer par priorité la planification des threads.Gets or sets a ThreadPriority value that is used by the operating system to prioritize thread scheduling. Pour plus d’informations, consultez Planification des threads et la référence de ThreadPriority.For more information, see Scheduling threads and the ThreadPriority reference.
ThreadState Obtient une valeur ThreadState contenant les états actuels d’un thread.Gets a ThreadState value containing the current states of a thread.

Voir aussiSee also