Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Método Thread.Join (Int32)

 

Publicado: agosto de 2016

Bloqueia o thread de chamada até que o thread representado por essa instância termine ou até que o tempo especificado tenha decorrido, enquanto continua executando o COM padrão e o bombeamento de SendMessage.

Namespace:   System.Threading
Assembly:  mscorlib (em mscorlib.dll)

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

Parâmetros

millisecondsTimeout
Type: System.Int32

O número de milissegundos para espera pelo encerramento do thread.

Valor Retornado

Type: System.Boolean

true se o thread tiver sido encerrado; false se o thread não tiver sido encerrado depois que o tempo especificado pelo parâmetro millisecondsTimeout tiver decorrido.

Exception Condition
ArgumentOutOfRangeException

O valor de millisecondsTimeout será negativo e não será igual a Timeout.Infinite em milissegundos.

ThreadStateException

O thread não foi iniciado.

Join(Int32)é um método de sincronização que bloqueia o thread de chamada (ou seja, o thread que chama o método) até que o thread cujo Join é chamado de método foi concluída ou o intervalo de tempo limite. No exemplo a seguir, o Thread1 chamadas de threads a Join() método Thread2, que faz com que Thread1 para bloquear até que Thread2 foi concluída ou 2 segundos.

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 é especificado para o millisecondsTimeout parâmetro, que esse método se comporta de forma idêntica ao Join() sobrecarga do método, exceto para o valor de retorno.

Se o thread já foi encerrado quando Join é chamado, o método retorna imediatamente.

Esse método altera o estado do thread de chamada para incluir ThreadState.WaitSleepJoin. Não é possível invocar Join em um thread que está no ThreadState.Unstarted estado.

.NET Framework
Disponível desde 1.1
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Retornar ao início
Mostrar: