Thread Construtores

Definição

Inicializa uma nova instância da Thread classe.

Sobrecargas

Name Description
Thread(ParameterizedThreadStart)

Inicializa uma nova instância da Thread classe, especificando um delegado que permite que um objeto seja passado para a thread quando a thread é iniciada.

Thread(ThreadStart)

Inicializa uma nova instância da Thread classe.

Thread(ParameterizedThreadStart, Int32)

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

Thread(ThreadStart, Int32)

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

Thread(ParameterizedThreadStart)

Inicializa uma nova instância da Thread classe, especificando um delegado que permite que um objeto seja passado para a thread quando a thread é iniciada.

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 invocar quando este thread começa a ser executado.

Exceções

start é null.

Exemplos

O exemplo seguinte 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.'

Observações

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 a thread, use o Start(Object) método overload.

Note

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

Ver também

Aplica-se a

Thread(ThreadStart)

Inicializa uma nova instância da Thread classe.

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 invocar quando este thread começa a ser executado.

Exceções

O start parâmetro é null.

Exemplos

O exemplo de código seguinte 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 seguinte exemplo de código 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

Observações

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 utilizadores podem omitir o construtor ThreadStart ao criar uma thread. Use o AddressOf operador ao passar o seu método, por exemplo, Dim t As New Thread(AddressOf ThreadProc). Visual Basic chama automaticamente o construtor ThreadStart.

Ver 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 a thread quando a thread é iniciada e especificando o tamanho máximo da pilha da 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 invocar quando este thread começa a ser executado.

maxStackSize
Int32

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

Importante: Para código parcialmente confiável, maxStackSize é ignorado se for maior do que o tamanho padrão da pilha. Nenhuma exceção é lançada.

Exceções

start é null.

maxStackSize é inferior a zero.

Observações

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

Importante

A partir do .NET Framework 4, só código totalmente confiável pode definir maxStackSize para um valor superior ao tamanho padrão da pilha (1 megabyte). Se for especificado um valor maior para maxStackSize quando o código está a correr com confiança parcial, maxStackSize é ignorado e o tamanho padrão da pilha é usado. Nenhuma exceção é lançada. O código a qualquer nível de confiança pode definir maxStackSize para um valor inferior ao tamanho padrão da pilha.

Note

Se estiver a desenvolver uma biblioteca totalmente confiável que será usada por código parcialmente confiável, e precisar de iniciar uma thread que exija uma stack grande, deve afirmar total trust antes de criar a thread, ou o tamanho padrão da stack será usado. Não faças isto a menos que controles totalmente o código que corre na thread.

Se maxStackSize for inferior ao tamanho mínimo da pilha, utiliza-se o tamanho mínimo da pilha. Se maxStackSize não for múltiplo do tamanho da página, é arredondado para o múltiplo maior seguinte 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 do executável é utilizado.

Se especificar um tamanho de pilha muito pequeno, pode ser necessário desativar o stack-overflow sonding. Quando a pilha está severamente restrita, a sondagem pode causar um overflow da pilha. Para desativar a sondagem de overflow de pilha, adicione o seguinte ao ficheiro de configuração da sua aplicação numa aplicação .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 a 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 invocar quando este thread começa a ser executado.

maxStackSize
Int32

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

Importante: Para código parcialmente confiável, maxStackSize é ignorado se for maior do que o tamanho padrão da pilha. Nenhuma exceção é lançada.

Exceções

start é null.

maxStackSize é inferior a zero.

Observações

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

Importante

A partir do .NET Framework 4, só código totalmente confiável pode definir maxStackSize para um valor superior ao tamanho padrão da pilha (1 megabyte). Se for especificado um valor maior para maxStackSize quando o código está a correr com confiança parcial, maxStackSize é ignorado e o tamanho padrão da pilha é usado. Nenhuma exceção é lançada. O código a qualquer nível de confiança pode definir maxStackSize para um valor inferior ao tamanho padrão da pilha.

Note

Se estiver a desenvolver uma biblioteca totalmente confiável que será usada por código parcialmente confiável, e precisar de iniciar uma thread que exija uma stack grande, deve afirmar total trust antes de criar a thread, ou o tamanho padrão da stack será usado. Não faças isto a menos que controles totalmente o código que corre na thread.

Se maxStackSize for inferior ao tamanho mínimo da pilha, utiliza-se o tamanho mínimo da pilha. Se maxStackSize não for múltiplo do tamanho da página, é arredondado para o múltiplo maior seguinte do tamanho da página. Por exemplo, se estiveres a usar o .NET Framework versão 2.0 no Windows Vista, 256KB (262.144 bytes) é o tamanho mínimo da pilha, e o tamanho da página é 64KB (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 do executável é utilizado.

Se especificar um tamanho de pilha muito pequeno, pode ser necessário desativar o stack-overflow sonding. Quando a pilha está severamente restrita, a sondagem pode causar um overflow da pilha. Para desativar a sondagem de overflow de pilha, adicione o seguinte ao ficheiro de configuração da sua aplicação numa aplicação .NET Framework.

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

Aplica-se a