Recherche
 
 
 
Tutoriaux
 
- Initiation à VS .NET
- Agencement des composants
- Menu déroulant
- Pop-up
- Traitement des fichiers
- Les Délégués
- Les Threads
- Fichiers XML
- Flux Web
- Services Web
 
 
Projets
 
- Calpe's World
- Sarky
- CyberAbuse
 
 
Me conctacter
 
- Demande d'aide
- Me proposer un poste
 
 
Liens
 
- Developpez.com
- C# Help
- Cours C# de l'ESSI
 
 
Threads

Principe

Un programme dit 'multithreads' permet de réaliser plusieurs tâches en parallèle, par exemple: " calculer en même temps l'âge du capitaine et la vitesse de son bâteau". Ce concept est ancien car il provient du fameux 'fork' qu'on apprend durant ses cinquièmes leçons de C :)
Le Framework .Net fournit une multitude de choix pour implémenter des programmes à plusieurs tâches. Ce principe a été heureusement largement simplifié et je vais essayer d'y vous initier.

Fonctionnement

Tout dabord créons une application Windows avec un TextBox avec la propriété Multiline afin d'y afficher le résultat.



Ensuite ajoutons le namespace System.Threading; afin de pouvoir utiliser les thread.
using System.Threading;

namespace thread
{

Maintenant ajoutons aux variables privées de la classe deux entiers:
     public class Form1 : System.Windows.Forms.Form
     {
          private int i,j;

Initialisons ces variables à 0:
          private void Form1_Load(object sender, System.EventArgs e)
          {
               i = 0;
               j = 0;
          }


Créons une méthode pour implémenter la variable i(ajouter +1 à la variable i) en boucle et afficher la valeur de i sur TextBox:
          private void implemente_i()
          {
               i++;
               textBox1.AppendText("\r\n"+i.ToString());
               implemente_i();
          }
          

Faisons de même pour la variable j:
          private void implemente_j()
          {
               j++;
               textBox2.AppendText("\r\n"+j.ToString());
               implemente_j();
          }
          

Si on avait appelé les deux fonctions précédentes l'une après l'autre comme ceci:
private void Form1_Load(object sender, System.EventArgs e)
          {
               implemente_i();
               implemente_j();
          }
          

On aurait implémenter i à l'infini et on aurait jamais implémenter j car on serait rester sur la méthode implemente_i() qui aurait tourné en boucle.
D'où l'interêt du thread qui permettra d'exécuter la méthode implemente_i() et la méthode implemente_j() en même temps.

Pour se faire, créons maintenant deux thread afin d'appeler ces deux méthodes:
Il suffit de créer le thread ( t1 = new Thread(.. ) et de l'appeler ( t1.Start(); )
La méthode Form1_Load devient donc:
private void Form1_Load(object sender, System.EventArgs e)
          {
               i = 0;
               j = 0;
               
               t1 = new Thread(new ThreadStart(implemente_i));     
               t1.Start();                    
               
               t2 = new Thread(new ThreadStart(implemente_j));     
               t2.Start();
          }
          

On verra alors dans les deux zones de texte les variables i et j s'incrémenter à l'infini toutes les deux en même temps.