Lire en anglais

Partager via


Thread.Join Méthode

Définition

Bloque le thread appelant jusqu’à l’arrêt du thread représenté par cette instance.

Surcharges

Join()

Bloque le thread appelant jusqu’à ce que le thread représenté par cette instance s’arrête, tout en continuant d’exécuter le pompage COM et SendMessage standard.

Join(Int32)

Bloque le thread appelant jusqu'à ce que le thread représenté par cette instance s'arrête ou que la durée spécifiée soit écoulée, tout en continuant d'exécuter le pompage COM et SendMessage standard.

Join(TimeSpan)

Bloque le thread appelant jusqu'à ce que le thread représenté par cette instance s'arrête ou que la durée spécifiée soit écoulée, tout en continuant d'exécuter le pompage COM et SendMessage standard.

Join()

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Bloque le thread appelant jusqu’à ce que le thread représenté par cette instance s’arrête, tout en continuant d’exécuter le pompage COM et SendMessage standard.

public void Join();

Exceptions

L’appelant a tenté de joindre un thread dont l’état est Unstarted.

Le thread est interrompu lors de l’attente.

Remarques

Join est une méthode de synchronisation qui bloque le thread appelant (autrement dit, le thread qui appelle la méthode) jusqu’à ce que le thread dont Join la méthode est appelée soit terminé. Utilisez cette méthode pour vous assurer qu’un thread a été arrêté. L’appelant se bloque indéfiniment si le thread ne se termine pas. Dans l’exemple suivant, le Thread1 thread appelle la Join() méthode de Thread2, ce qui provoque Thread1 le blocage jusqu’à ce Thread2 que soit terminé.

using System;
using System.Threading;

public class Example
{
   static Thread thread1, thread2;
   
   public static void Main()
   {
      thread1 = new Thread(ThreadProc);
      thread1.Name = "Thread1";
      thread1.Start();
      
      thread2 = new Thread(ThreadProc);
      thread2.Name = "Thread2";
      thread2.Start();   
   }

   private static void ThreadProc()
   {
      Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name);
      if (Thread.CurrentThread.Name == "Thread1" && 
          thread2.ThreadState != ThreadState.Unstarted)
         thread2.Join();
      
      Thread.Sleep(4000);
      Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name);
      Console.WriteLine("Thread1: {0}", thread1.ThreadState);
      Console.WriteLine("Thread2: {0}\n", thread2.ThreadState);
   }
}
// The example displays output like the following:
//       Current thread: Thread1
//       
//       Current thread: Thread2
//       
//       Current thread: Thread2
//       Thread1: WaitSleepJoin
//       Thread2: Running
//       
//       
//       Current thread: Thread1
//       Thread1: Running
//       Thread2: Stopped

Si le thread s’est déjà terminé quand Join est appelé, la méthode retourne immédiatement.

Avertissement

Vous ne devez jamais appeler la Join méthode de l’objet Thread qui représente le thread actuel à partir du thread actuel. Cela empêche votre application de répondre, car le thread actuel s’attend indéfiniment.

Cette méthode modifie l’état du thread appelant pour inclure ThreadState.WaitSleepJoin. Vous ne pouvez pas appeler Join sur un thread à l’état ThreadState.Unstarted .

Voir aussi

S’applique à

.NET 10 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Join(Int32)

Source:
Thread.CoreCLR.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Bloque le thread appelant jusqu'à ce que le thread représenté par cette instance s'arrête ou que la durée spécifiée soit écoulée, tout en continuant d'exécuter le pompage COM et SendMessage standard.

public bool Join(int millisecondsTimeout);

Paramètres

millisecondsTimeout
Int32

Nombre de millisecondes à attendre l'arrêt du thread.

Retours

true si le thread s'est arrêté ; false s'il ne s'est pas arrêté après l'expiration du délai spécifié par le paramètre millisecondsTimeout.

Exceptions

La valeur de millisecondsTimeout est négative et n’est pas égale à Infinite en millisecondes.

Le thread n’a pas été démarré.

millisecondsTimeout est inférieur à -1 (Timeout.Infinite).

Le thread a été interrompu lors de l’attente.

Remarques

Join(Int32) est une méthode de synchronisation qui bloque le thread appelant (autrement dit, le thread qui appelle la méthode) jusqu’à ce que le thread dont Join la méthode est appelée soit terminé ou que l’intervalle de délai d’attente s’est écoulé. Dans l’exemple suivant, le Thread1 thread appelle la Join() méthode de Thread2, ce qui provoque Thread1 le blocage jusqu’à ce Thread2 que soit terminé ou 2 secondes se soient écoulées.

using System;
using System.Threading;

public class Example
{
   static Thread thread1, thread2;
   
   public static void Main()
   {
      thread1 = new Thread(ThreadProc);
      thread1.Name = "Thread1";
      thread1.Start();
      
      thread2 = new Thread(ThreadProc);
      thread2.Name = "Thread2";
      thread2.Start();   
   }

   private static void ThreadProc()
   {
      Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name);
      if (Thread.CurrentThread.Name == "Thread1" && 
          thread2.ThreadState != ThreadState.Unstarted)
         if (thread2.Join(2000))
            Console.WriteLine("Thread2 has termminated.");
         else
            Console.WriteLine("The timeout has elapsed and Thread1 will resume.");   
      
      Thread.Sleep(4000);
      Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name);
      Console.WriteLine("Thread1: {0}", thread1.ThreadState);
      Console.WriteLine("Thread2: {0}\n", thread2.ThreadState);
   }
}
// The example displays the following output:
//       Current thread: Thread1
//       
//       Current thread: Thread2
//       The timeout has elapsed and Thread1 will resume.
//       
//       Current thread: Thread2
//       Thread1: WaitSleepJoin
//       Thread2: Running
//       
//       
//       Current thread: Thread1
//       Thread1: Running
//       Thread2: Stopped

Si Timeout.Infinite est spécifié pour le millisecondsTimeout paramètre, cette méthode se comporte de façon identique à la surcharge de méthode, à l’exception Join() de la valeur de retour.

Si le thread s’est déjà terminé quand Join est appelé, la méthode retourne immédiatement.

Cette méthode modifie l’état du thread appelant pour inclure ThreadState.WaitSleepJoin. Vous ne pouvez pas appeler Join sur un thread à l’état ThreadState.Unstarted .

Voir aussi

S’applique à

.NET 10 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Join(TimeSpan)

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs

Bloque le thread appelant jusqu'à ce que le thread représenté par cette instance s'arrête ou que la durée spécifiée soit écoulée, tout en continuant d'exécuter le pompage COM et SendMessage standard.

public bool Join(TimeSpan timeout);

Paramètres

timeout
TimeSpan

TimeSpan ayant pour valeur la durée à attendre l'arrêt du thread.

Retours

true si le thread s'est arrêté ; false s'il ne s'est pas arrêté après l'expiration du délai spécifié par le paramètre timeout.

Exceptions

La valeur de timeout est négative et n’est pas égale à en millisecondes, ou est supérieure à InfiniteInt32.MaxValue millisecondes.

L’appelant a tenté de joindre un thread dont l’état est Unstarted.

Exemples

L’exemple de code suivant montre comment utiliser une TimeSpan valeur avec la Join méthode .

using System;
using System.Threading;

class Test
{
    static TimeSpan waitTime = new TimeSpan(0, 0, 1);

    public static void Main() 
    {
        Thread newThread = new Thread(Work);
        newThread.Start();

        if(newThread.Join(waitTime + waitTime)) {
            Console.WriteLine("New thread terminated.");
        }
        else {
            Console.WriteLine("Join timed out.");
        }
    }

    static void Work()
    {
        Thread.Sleep(waitTime);
    }
}
// The example displays the following output:
//        New thread terminated.

Remarques

Join(TimeSpan) est une méthode de synchronisation qui bloque le thread appelant (autrement dit, le thread qui appelle la méthode) jusqu’à ce que le thread dont Join la méthode est appelée soit terminé ou que l’intervalle de délai d’attente s’est écoulé. Dans l’exemple suivant, le Thread1 thread appelle la Join() méthode de Thread2, ce qui provoque Thread1 le blocage jusqu’à ce Thread2 que soit terminé ou 2 secondes se soient écoulées.

using System;
using System.Threading;

public class Example
{
   static Thread thread1, thread2;
   
   public static void Main()
   {
      thread1 = new Thread(ThreadProc);
      thread1.Name = "Thread1";
      thread1.Start();
      
      thread2 = new Thread(ThreadProc);
      thread2.Name = "Thread2";
      thread2.Start();   
   }

   private static void ThreadProc()
   {
      Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name);
      if (Thread.CurrentThread.Name == "Thread1" && 
          thread2.ThreadState != ThreadState.Unstarted)
         if (thread2.Join(TimeSpan.FromSeconds(2)))
            Console.WriteLine("Thread2 has termminated.");
         else
            Console.WriteLine("The timeout has elapsed and Thread1 will resume.");   
      
      Thread.Sleep(4000);
      Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name);
      Console.WriteLine("Thread1: {0}", thread1.ThreadState);
      Console.WriteLine("Thread2: {0}\n", thread2.ThreadState);
   }
}
// The example displays the following output:
//       Current thread: Thread1
//       
//       Current thread: Thread2
//       The timeout has elapsed and Thread1 will resume.
//       
//       Current thread: Thread2
//       Thread1: WaitSleepJoin
//       Thread2: Running
//       
//       
//       Current thread: Thread1
//       Thread1: Running
//       Thread2: Stopped

Si Timeout.Infinite est spécifié pour timeout, cette méthode se comporte de manière identique à la surcharge de méthode, à l’exception Join() de la valeur de retour.

Si le thread s’est déjà terminé quand Join est appelé, la méthode retourne immédiatement.

Cette méthode modifie l’état du thread actuel pour inclure WaitSleepJoin. Vous ne pouvez pas appeler Join sur un thread à l’état ThreadState.Unstarted .

Voir aussi

S’applique à

.NET 10 et autres versions
Produit Versions
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1