Compartilhar via


Thread Construtores

Definição

Inicializa uma nova instância da classe Thread.

Sobrecargas

Thread(ParameterizedThreadStart)

Inicializa uma nova instância da classe Thread, 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 classe Thread, especificando um delegado que permite que um objeto seja passado para o thread quando o thread é iniciado e especificando o tamanho máximo da pilha para o thread.

Thread(ThreadStart, Int32)

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

Thread(ParameterizedThreadStart)

Inicializa uma nova instância da classe Thread, 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çar 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 namespace System;
using namespace System::Threading;

namespace SystemThreadingExample
{
    public ref class Work
    {
    public:
        void StartThreads()
        {
            // Start a thread that calls a parameterized static method.
            Thread^ newThread = gcnew
                Thread(gcnew ParameterizedThreadStart(Work::DoWork));
            newThread->Start(42);
              
            // Start a thread that calls a parameterized instance method.
            Work^ someWork = gcnew Work;
            newThread = gcnew Thread(
                        gcnew ParameterizedThreadStart(someWork,
                        &Work::DoMoreWork));
            newThread->Start("The answer.");
        }

        static void DoWork(Object^ data)
        {
            Console::WriteLine("Static thread procedure. Data='{0}'", 
                data);
        }

        void DoMoreWork(Object^ data)
        {
            Console::WriteLine("Instance thread procedure. Data='{0}'", 
                data);
        }
    };
}

//Entry point of example application
int main()
{
    SystemThreadingExample::Work^ samplework = 
        gcnew SystemThreadingExample::Work();
    samplework->StartThreads();
}
// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
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.'
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 Start(Object) sobrecarga do método.

Observação

Visual Basic os usuários podem omitir o ThreadStart construtor 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 ThreadStart construtor.

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 delegado ThreadStart que representa os métodos a serem invocados quando esse thread começar a ser executado.

Exceções

O parâmetro start é null.

Exemplos

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

using namespace System;
using namespace System::Threading;
ref class Work
{
private:
   Work(){}


public:
   static void DoWork(){}

};

int main()
{
   Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Work::DoWork ) );
   newThread->Start();
}
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() {}
}
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 namespace System;
using namespace System::Threading;
ref class Work
{
public:
   Work(){}

   void DoWork(){}

};

int main()
{
   Work^ threadWork = gcnew Work;
   Thread^ newThread = gcnew Thread( gcnew ThreadStart( threadWork, &Work::DoWork ) );
   newThread->Start();
}
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() {}
}
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.

Observação

Visual Basic os usuários podem omitir o ThreadStart construtor 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 ThreadStart construtor.

Confira também

Aplica-se a

Thread(ParameterizedThreadStart, Int32)

Inicializa uma nova instância da classe Thread, especificando um delegado que permite que um objeto seja passado para o thread quando o thread é 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 delegado ParameterizedThreadStart que representa os métodos a serem invocados quando esse thread começar a ser executado.

maxStackSize
Int32

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

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

Exceções

start é null.

maxStackSize é menor que zero.

Comentários

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

Importante

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

Observação

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

Se maxStackSize for menor que o tamanho mínimo da pilha, será usado o tamanho mínimo da pilha. 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 no Windows Vista, 256kb (262.144 bytes) é o tamanho mínimo da pilha e o tamanho da página é 64 kb (65.536 bytes).

Observação

as versões do Microsoft Windows anteriores ao Windows XP e Windows Server 2003, maxStackSize são ignoradas 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.

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

Aplica-se a

Thread(ThreadStart, Int32)

Inicializa uma nova instância da classe Thread, especificando o tamanho máximo da pilha do 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 delegado ThreadStart que representa os métodos a serem invocados quando esse thread começar a ser executado.

maxStackSize
Int32

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

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

Exceções

start é null.

maxStackSize é menor que zero.

Comentários

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

Importante

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

Observação

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

Se maxStackSize for menor que o tamanho mínimo da pilha, será usado o tamanho mínimo da pilha. 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 no Windows Vista, 256kb (262.144 bytes) é o tamanho mínimo da pilha e o tamanho da página é 64 kb (65.536 bytes).

Observação

as versões do Microsoft Windows anteriores ao Windows XP e Windows Server 2003, maxStackSize são ignoradas 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.

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

Aplica-se a