PROFDINFO.COM

Votre enseignant d'informatique en ligne

Les threads en C# - résumé des notions pertinentes

Déclarer un thread

System.Threading.Thread monThread;

Instancier un thread

mon thread = new Thread(new ThreadStart(uneMéthode));

ThreadStart est un délégué, un objet qui sert à encapsuler une méthode de façon à ce qu'elle puisse être passée en paramètre (similaire à un foncteur en C++). On passe un ThreadStart au constructeur du Thread. Lorsque le Thread sera démarré (ce qui n'est pas le cas uniquement parce qu'il a été instancié), la méthode encapsulée dans le ThreadStart sera lancée. On peut y mettre n'importe quelle méthode qui n'accepte pas de paramètre et qui retourne void. En effet, un délégué a une signature et seules les méthodes ayant la même signature peuvent y être placées. On ne peut pas non plus passer une méthode d'instance à un ThreadStart (par exemple: new ThreadStart(monObjet.méthode) est invalide. Par contre: new ThreadStart(maClasse.méthode) est valide si méthode est statique).

Démarrer un thread

monThread.Start();

Arrêter un thread

monThread.Abort();

Ceci l'arrête abruptement.

Suspendre et repartir un thread

monThread.Suspend();
monThread.Resume();

Suspendre un thread pour un temps défini

Thread.Sleep(int millisecondes);

Cette méthode statique ne peut être appelé qu'à l'intérieur du thread lui-même - un thread ne peut pas en faire dormir un autre.

Attendre l'arrêt d'un thread

monThread.Join()

Méthode bloquante qui termine lorsque le thread se termine par lui-même. Join ne demande rien au thread, elle fait juste attendre.

Changer la priorité d'exécution d'un thread

monThread.Priority = ThreadPriority.AboveNormal;

ThreadPriority est un enum qui contient les valeurs Highest, AboveNormal, Normal, BelowNormal, Lowest.

Mettre le thread en background

monThread.IsBackground = true;

Un thread en background sera automatiquement terminé quand le thread principal terminera. Dans le cas contraire, des threads peuvent rester actifs et devenir des processus fantômes. Utilisez le gestionnaire des tâches pour les éliminer (ils porteront le nom d'exécutable de votre programme).