Thread Construtores

Definição

Inicializa uma nova instância da classe Thread.

Sobrecargas

Nome Description
Thread(ParameterizedThreadStart)

Inicializa uma nova instância da Thread classe, especificando um delegado que permite que um objeto seja passado para o thread quando o thread for iniciado.

Thread(ThreadStart)

Inicializa uma nova instância da classe Thread.

Thread(ParameterizedThreadStart, Int32)

Inicializa uma nova instância da Thread classe, especificando um delegado que permite que um objeto seja passado para o thread quando o thread for iniciado e especificando o tamanho máximo da pilha para o thread.

Thread(ThreadStart, Int32)

Inicializa uma nova instância da Thread classe, especificando o tamanho máximo da pilha para o thread.

Thread(ParameterizedThreadStart)

Inicializa uma nova instância da Thread classe, especificando um delegado que permite que um objeto seja passado para o thread quando o thread for iniciado.

public:
 Thread(System::Threading::ParameterizedThreadStart ^ start);
public Thread(System.Threading.ParameterizedThreadStart start);
new System.Threading.Thread : System.Threading.ParameterizedThreadStart -> System.Threading.Thread
Public Sub New (start As ParameterizedThreadStart)

Parâmetros

start
ParameterizedThreadStart

Um delegado que representa os métodos a serem invocados quando esse thread começa a ser executado.

Exceções

start é null.

Exemplos

O exemplo a seguir mostra a sintaxe para criar e usar um ParameterizedThreadStart delegado com um método estático e um método de instância.

using System;
using System.Threading;

public class Work
{
    public static void Main()
    {
        // Start a thread that calls a parameterized static method.
        Thread newThread = new Thread(Work.DoWork);
        newThread.Start(42);

        // Start a thread that calls a parameterized instance method.
        Work w = new Work();
        newThread = new Thread(w.DoMoreWork);
        newThread.Start("The answer.");
    }
 
    public static void DoWork(object data)
    {
        Console.WriteLine("Static thread procedure. Data='{0}'",
            data);
    }

    public void DoMoreWork(object data)
    {
        Console.WriteLine("Instance thread procedure. Data='{0}'",
            data);
    }
}
// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
open System.Threading

type Work() =
    static member DoWork(data: obj) =
        printfn $"Static thread procedure. Data='{data}'"

    member _.DoMoreWork(data: obj) =
        printfn $"Instance thread procedure. Data='{data}'"

// Start a thread that calls a parameterized static method.
let newThread = Thread(ParameterizedThreadStart Work.DoWork)
newThread.Start 42

// Start a thread that calls a parameterized instance method.
let w = Work()
let newThread2 = Thread(ParameterizedThreadStart w.DoMoreWork)
newThread.Start "The answer."

// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
Imports System.Threading

Public Class Work
    Shared Sub Main()
        ' Start a thread that calls a parameterized static method.
        Dim newThread As New Thread(AddressOf Work.DoWork)
        newThread.Start(42)

        ' Start a thread that calls a parameterized instance method.
        Dim w As New Work()
        newThread = New Thread(AddressOf w.DoMoreWork)
        newThread.Start("The answer.")
    End Sub
 
    Public Shared Sub DoWork(ByVal data As Object)
        Console.WriteLine("Static thread procedure. Data='{0}'",
                          data)
    End Sub

    Public Sub DoMoreWork(ByVal data As Object) 
        Console.WriteLine("Instance thread procedure. Data='{0}'",
                          data)
    End Sub
End Class
' This example displays output like the following:
'    Static thread procedure. Data='42'
'    Instance thread procedure. Data='The answer.'

Comentários

Um thread não começa a ser executado quando é criado. Para agendar o thread para execução, chame o Start método. Para passar um objeto de dados para o thread, use a sobrecarga do Start(Object) método.

Note

Visual Basic usuários podem omitir o construtor ThreadStart ao criar um thread. Use o AddressOf operador ao passar seu método, por exemplo, Dim t As New Thread(AddressOf ThreadProc). Visual Basic chama automaticamente o construtor ThreadStart.

Confira também

Aplica-se a

Thread(ThreadStart)

Inicializa uma nova instância da classe Thread.

public:
 Thread(System::Threading::ThreadStart ^ start);
public Thread(System.Threading.ThreadStart start);
new System.Threading.Thread : System.Threading.ThreadStart -> System.Threading.Thread
Public Sub New (start As ThreadStart)

Parâmetros

start
ThreadStart

Um ThreadStart delegado que representa os métodos a serem invocados quando esse thread começa a ser executado.

Exceções

O start parâmetro é null.

Exemplos

O exemplo de código a seguir mostra como criar um thread que executa um método estático.

using System;
using System.Threading;

class Test
{
    static void Main() 
    {
        Thread newThread = 
            new Thread(new ThreadStart(Work.DoWork));
        newThread.Start();
    }
}

class Work 
{
    Work() {}

    public static void DoWork() {}
}
open System.Threading

module Work =
    let doWork () = ()

let newThread = Thread(ThreadStart Work.doWork)
newThread.Start()
Imports System.Threading

Public Class Test
    <MTAThread> _
    Shared Sub Main()
        Dim newThread As New Thread(AddressOf Work.DoWork)
        newThread.Start()
    End Sub
End Class

Public Class Work 

    Private Sub New()
    End Sub

    Shared Sub DoWork()
    End Sub

End Class

O exemplo de código a seguir mostra como criar um thread que executa um método de instância.

using System;
using System.Threading;

class Test
{
    static void Main() 
    {
        Work threadWork = new Work();
        Thread newThread = 
            new Thread(new ThreadStart(threadWork.DoWork));
        newThread.Start();
    }
}

class Work 
{
    public Work() {}

    public void DoWork() {}
}
open System.Threading

type Work() =
    member _.DoWork() = ()

let threadWork = Work()
let newThread = Thread(ThreadStart threadWork.DoWork)
newThread.Start()
Imports System.Threading

Public Class Test
    <MTAThread> _
    Shared Sub Main() 
        Dim threadWork As New Work()
        Dim newThread As New Thread(AddressOf threadWork.DoWork)
        newThread.Start()
    End Sub
End Class

Public Class Work

    Sub New()
    End Sub

    Sub DoWork() 
    End Sub

End Class

Comentários

Um thread não começa a ser executado quando é criado. Para agendar o thread para execução, chame o Start método.

Note

Visual Basic usuários podem omitir o construtor ThreadStart ao criar um thread. Use o AddressOf operador ao passar seu método, por exemplo, Dim t As New Thread(AddressOf ThreadProc). Visual Basic chama automaticamente o construtor ThreadStart.

Confira também

Aplica-se a

Thread(ParameterizedThreadStart, Int32)

Inicializa uma nova instância da Thread classe, especificando um delegado que permite que um objeto seja passado para o thread quando o thread for iniciado e especificando o tamanho máximo da pilha para o thread.

public:
 Thread(System::Threading::ParameterizedThreadStart ^ start, int maxStackSize);
public Thread(System.Threading.ParameterizedThreadStart start, int maxStackSize);
new System.Threading.Thread : System.Threading.ParameterizedThreadStart * int -> System.Threading.Thread
Public Sub New (start As ParameterizedThreadStart, maxStackSize As Integer)

Parâmetros

start
ParameterizedThreadStart

Um ParameterizedThreadStart delegado que representa os métodos a serem invocados quando esse thread começa a ser executado.

maxStackSize
Int32

O tamanho máximo da pilha, em bytes, a ser usado pelo thread ou 0 para usar o tamanho máximo de pilha padrão especificado no cabeçalho para o executável.

Importante Para código parcialmente confiável, maxStackSize será ignorado se ele for maior que o tamanho da pilha padrão. Nenhuma exceção é gerada.

Exceções

start é null.

maxStackSize é menor que zero.

Comentários

Evite usar essa sobrecarga de construtor. O tamanho da pilha padrão usado pela sobrecarga do Thread(ParameterizedThreadStart) construtor é o tamanho de pilha recomendado para threads. Se um thread tiver problemas de memória, a causa mais provável será o erro de programação, como a recursão infinita.

Importante

A partir do .NET Framework 4, somente o código totalmente confiável pode definir maxStackSize para um valor maior que o tamanho da pilha padrão (1 megabyte). Se um valor maior for especificado para maxStackSize quando o código estiver em execução com confiança parcial, maxStackSize será ignorado e o tamanho da pilha padrão será usado. Nenhuma exceção é gerada. O código em qualquer nível de confiança pode ser definido maxStackSize como um valor menor que o tamanho da pilha padrão.

Note

Se você estiver desenvolvendo uma biblioteca totalmente confiável que será usada por um código parcialmente confiável e precisar iniciar um thread que exija uma pilha grande, você deverá declarar total confiança antes de criar o thread ou o tamanho da pilha padrão será usado. Não faça isso, a menos que você controle totalmente o código executado no thread.

Se maxStackSize for menor que o tamanho mínimo da pilha, o tamanho mínimo da pilha será usado. Se maxStackSize não for um múltiplo do tamanho da página, ele será arredondado para o próximo múltiplo maior do tamanho da página.

Note

Em versões de Microsoft Windows anteriores a Windows XP e Windows Server 2003, maxStackSize é ignorado e o tamanho da pilha especificado no cabeçalho executável é usado.

Se você especificar um tamanho de pilha muito pequeno, talvez seja necessário desabilitar a investigação de estouro de pilha. Quando a pilha é severamente restrita, a investigação pode causar um estouro de pilha. Para desabilitar a investigação de estouro de pilha, adicione o seguinte ao arquivo de configuração do aplicativo em um aplicativo .NET Framework.

<configuration>
  <runtime>
    <disableStackOverflowProbing enabled="true"/>
  </runtime>
</configuration>

Aplica-se a

Thread(ThreadStart, Int32)

Inicializa uma nova instância da Thread classe, especificando o tamanho máximo da pilha para o thread.

public:
 Thread(System::Threading::ThreadStart ^ start, int maxStackSize);
public Thread(System.Threading.ThreadStart start, int maxStackSize);
new System.Threading.Thread : System.Threading.ThreadStart * int -> System.Threading.Thread
Public Sub New (start As ThreadStart, maxStackSize As Integer)

Parâmetros

start
ThreadStart

Um ThreadStart delegado que representa os métodos a serem invocados quando esse thread começa a ser executado.

maxStackSize
Int32

O tamanho máximo da pilha, em bytes, a ser usado pelo thread ou 0 para usar o tamanho máximo de pilha padrão especificado no cabeçalho para o executável.

Importante Para código parcialmente confiável, maxStackSize será ignorado se ele for maior que o tamanho da pilha padrão. Nenhuma exceção é gerada.

Exceções

start é null.

maxStackSize é menor que zero.

Comentários

Evite usar essa sobrecarga de construtor. O tamanho da pilha padrão usado pela sobrecarga do Thread(ThreadStart) construtor é o tamanho de pilha recomendado para threads. Se um thread tiver problemas de memória, a causa mais provável será o erro de programação, como a recursão infinita.

Importante

A partir do .NET Framework 4, somente o código totalmente confiável pode definir maxStackSize para um valor maior que o tamanho da pilha padrão (1 megabyte). Se um valor maior for especificado para maxStackSize quando o código estiver em execução com confiança parcial, maxStackSize será ignorado e o tamanho da pilha padrão será usado. Nenhuma exceção é gerada. O código em qualquer nível de confiança pode ser definido maxStackSize como um valor menor que o tamanho da pilha padrão.

Note

Se você estiver desenvolvendo uma biblioteca totalmente confiável que será usada por um código parcialmente confiável e precisar iniciar um thread que exija uma pilha grande, você deverá declarar total confiança antes de criar o thread ou o tamanho da pilha padrão será usado. Não faça isso, a menos que você controle totalmente o código executado no thread.

Se maxStackSize for menor que o tamanho mínimo da pilha, o tamanho mínimo da pilha será usado. Se maxStackSize não for um múltiplo do tamanho da página, ele será arredondado para o próximo múltiplo maior do tamanho da página. Por exemplo, se você estiver usando o .NET Framework versão 2.0 em Windows Vista, 256 KB (262.144 bytes) será o tamanho mínimo da pilha e o tamanho da página será de 64 KB (65.536 bytes).

Note

Em versões de Microsoft Windows anteriores a Windows XP e Windows Server 2003, maxStackSize é ignorado e o tamanho da pilha especificado no cabeçalho executável é usado.

Se você especificar um tamanho de pilha muito pequeno, talvez seja necessário desabilitar a investigação de estouro de pilha. Quando a pilha é severamente restrita, a investigação pode causar um estouro de pilha. Para desabilitar a investigação de estouro de pilha, adicione o seguinte ao arquivo de configuração do aplicativo em um aplicativo .NET Framework.

<configuration>
  <runtime>
    <disableStackOverflowProbing enabled="true"/>
  </runtime>
</configuration>

Aplica-se a