Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Thread.Join (Int32)

 

Data di pubblicazione: agosto 2016

Blocca il thread chiamante finché non termina il thread rappresentato da questa istanza o finché non trascorre l'intervallo di tempo specificato, pur continuando a eseguire la distribuzione di SendMessage e COM standard.

Spazio dei nomi:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public bool Join(
	int millisecondsTimeout
)

Parametri

millisecondsTimeout
Type: System.Int32

Tempo di attesa espresso in millisecondi prima che il thread venga terminato.

Valore restituito

Type: System.Boolean

true se il thread è stato terminato; false se il thread non è stato terminato dopo l'intervallo di tempo specificato dal parametro millisecondsTimeout.

Exception Condition
ArgumentOutOfRangeException

Il valore di millisecondsTimeout è negativo e non è uguale a Timeout.Infinite in millisecondi.

ThreadStateException

Il thread non è stato avviato.

Join(Int32)è un metodo di sincronizzazione che blocca il thread chiamante (ovvero, il thread che chiama il metodo) finché il thread di entrambi i cui Join metodo viene chiamato è stata completata o è trascorso l'intervallo di timeout. Nell'esempio seguente, il Thread1 thread chiama il Join() metodo Thread2, causando Thread1 blocco finché Thread2 è stata completata o 2 secondi.

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

Se Timeout.Infinite specificato per il millisecondsTimeout parametro, questo metodo funziona in modo identico al Join() overload del metodo, tranne il valore restituito.

Se il thread ha già terminato quando Join viene chiamato il metodo restituisce immediatamente.

Questo metodo modifica lo stato del thread chiamante per includere ThreadState.WaitSleepJoin. Non è possibile richiamare Join su un thread che si trova il ThreadState.Unstarted dello stato.

.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: