Thread Construtores
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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>