Thread Thread Thread Thread Constructors

Определение

Перегрузки

Thread(ParameterizedThreadStart) Thread(ParameterizedThreadStart) Thread(ParameterizedThreadStart) Thread(ParameterizedThreadStart)

Инициализирует новый экземпляр класса Thread, при этом указывается делегат, позволяющий объекту быть переданным в поток при запуске потока.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started.

Thread(ThreadStart) Thread(ThreadStart) Thread(ThreadStart) Thread(ThreadStart)

Инициализирует новый экземпляр класса Thread.Initializes a new instance of the Thread class.

Thread(ParameterizedThreadStart, Int32) Thread(ParameterizedThreadStart, Int32) Thread(ParameterizedThreadStart, Int32) Thread(ParameterizedThreadStart, Int32)

Инициализирует новый экземпляр класса Thread, при этом указывается делегат, позволяющий объекту быть переданным в поток при запуске потока с указанием максимального размера стека для потока.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started and specifying the maximum stack size for the thread.

Thread(ThreadStart, Int32) Thread(ThreadStart, Int32) Thread(ThreadStart, Int32) Thread(ThreadStart, Int32)

Инициализирует новый экземпляр класса Thread, указывая максимальный размер стека для потока.Initializes a new instance of the Thread class, specifying the maximum stack size for the thread.

Thread(ParameterizedThreadStart) Thread(ParameterizedThreadStart) Thread(ParameterizedThreadStart) Thread(ParameterizedThreadStart)

Инициализирует новый экземпляр класса Thread, при этом указывается делегат, позволяющий объекту быть переданным в поток при запуске потока.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started.

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)

Параметры

start
ParameterizedThreadStart ParameterizedThreadStart ParameterizedThreadStart ParameterizedThreadStart

Делегат, указывающий на методы, которые вызываются при запуске потока.A delegate that represents the methods to be invoked when this thread begins executing.

Исключения

Свойство start имеет значение null.start is null.

Примеры

В следующем примере показан синтаксис для создания и использования делегата ParameterizedThreadStart с статическим методом и методом экземпляра.The following example shows the syntax for creating and using a ParameterizedThreadStart delegate with a static method and an instance method.

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.'

Комментарии

Поток не начинает выполняться при его создании.A thread does not begin executing when it is created. Чтобы запланировать выполнение потока, вызовите метод Start.To schedule the thread for execution, call the Start method. Чтобы передать объект данных в поток, используйте перегрузку метода Start(Object).To pass a data object to the thread, use the Start(Object) method overload.

Примечание

Visual Basic пользователи могут опустить конструктор ThreadStart при создании потока.Visual Basic users can omit the ThreadStart constructor when creating a thread. Используйте оператор AddressOf при передаче метода, например Dim t As New Thread(AddressOf ThreadProc).Use the AddressOf operator when passing your method, for example Dim t As New Thread(AddressOf ThreadProc). Visual Basic автоматически вызывает конструктор ThreadStart.Visual Basic automatically calls the ThreadStart constructor.

Дополнительно

Thread(ThreadStart) Thread(ThreadStart) Thread(ThreadStart) Thread(ThreadStart)

Инициализирует новый экземпляр класса Thread.Initializes a new instance of the Thread class.

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)

Параметры

start
ThreadStart ThreadStart ThreadStart ThreadStart

Делегат ThreadStart, указывающий на методы, которые вызываются при запуске потока.A ThreadStart delegate that represents the methods to be invoked when this thread begins executing.

Исключения

Параметр start имеет значение null.The start parameter is null.

Примеры

В следующем примере кода показано, как создать поток, выполняющий статический метод.The following code example shows how to create a thread that executes a static method.

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

В следующем примере кода показано, как создать поток, выполняющий метод экземпляра.The following code example shows how to create a thread that executes an instance method.

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

Комментарии

Поток не начинает выполняться при его создании.A thread does not begin executing when it is created. Чтобы запланировать выполнение потока, вызовите метод Start.To schedule the thread for execution, call the Start method.

Примечание

Visual Basic пользователи могут опустить конструктор ThreadStart при создании потока.Visual Basic users can omit the ThreadStart constructor when creating a thread. Используйте оператор AddressOf при передаче метода, например Dim t As New Thread(AddressOf ThreadProc).Use the AddressOf operator when passing your method for example Dim t As New Thread(AddressOf ThreadProc). Visual Basic автоматически вызывает конструктор ThreadStart.Visual Basic automatically calls the ThreadStart constructor.

Дополнительно

Thread(ParameterizedThreadStart, Int32) Thread(ParameterizedThreadStart, Int32) Thread(ParameterizedThreadStart, Int32) Thread(ParameterizedThreadStart, Int32)

Инициализирует новый экземпляр класса Thread, при этом указывается делегат, позволяющий объекту быть переданным в поток при запуске потока с указанием максимального размера стека для потока.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started and specifying the maximum stack size for the 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)

Параметры

start
ParameterizedThreadStart ParameterizedThreadStart ParameterizedThreadStart ParameterizedThreadStart

Делегат ParameterizedThreadStart, указывающий на методы, которые вызываются при запуске потока.A ParameterizedThreadStart delegate that represents the methods to be invoked when this thread begins executing.

maxStackSize
Int32 Int32 Int32 Int32

Максимальный размер стека в байтах, используемый потоком, или же 0 для использования максимального размера по умолчанию, указывается в заголовке исполняемого файла.The maximum stack size, in bytes, to be used by the thread, or 0 to use the default maximum stack size specified in the header for the executable.

Внимание! Для частично доверенного кода значение параметра maxStackSize игнорируется, если оно превышает размер стека по умолчанию.Important For partially trusted code, maxStackSize is ignored if it is greater than the default stack size. Исключение не возникает.No exception is thrown.

Исключения

Свойство start имеет значение null.start is null.

Значение параметра maxStackSize меньше нуля.maxStackSize is less than zero.

Комментарии

Старайтесь не использовать эту перегрузку конструктора.Avoid using this constructor overload. Размер стека по умолчанию, используемый перегрузкой конструктора Thread(ParameterizedThreadStart), является рекомендуемым размером стека для потоков.The default stack size used by the Thread(ParameterizedThreadStart) constructor overload is the recommended stack size for threads. Если в потоке имеются проблемы с памятью, наиболее вероятной причиной является ошибка программирования, например бесконечная рекурсия.If a thread has memory problems, the most likely cause is programming error, such as infinite recursion.

Важно!

Начиная с .NET Framework 4.NET Framework 4, только полностью доверенный код может установить maxStackSize в значение, превышающее размер стека по умолчанию (1 МБ).Beginning with the .NET Framework 4.NET Framework 4, only fully trusted code can set maxStackSize to a value that is greater than the default stack size (1 megabyte). Если для maxStackSize задано большее значение, если код работает с частичным доверием, maxStackSize игнорируется и используется размер стека по умолчанию.If a larger value is specified for maxStackSize when code is running with partial trust, maxStackSize is ignored and the default stack size is used. Исключение не возникает.No exception is thrown. Код на любом уровне доверия может установить maxStackSize в значение, меньшее, чем размер стека по умолчанию.Code at any trust level can set maxStackSize to a value that is less than the default stack size.

Примечание

Если вы разрабатываете полностью доверенную библиотеку, которая будет использоваться частично доверенным кодом, и вам нужно запустить поток, требующий большого стека, перед созданием потока необходимо подтвердить полное доверие, иначе будет использоваться размер стека по умолчанию.If you are developing a fully trusted library that will be used by partially trusted code, and you need to start a thread that requires a large stack, you must assert full trust before creating the thread, or the default stack size will be used. Не выполняя это действие, если не полностью контролируется код, выполняемый в потоке.Do not do this unless you fully control the code that runs on the thread.

Если maxStackSize меньше, чем минимальный размер стека, используется минимальный размер стека.If maxStackSize is less than the minimum stack size, the minimum stack size is used. Если maxStackSize не кратен размеру страницы, он округляется до следующего большего размера, кратного размеру страницы.If maxStackSize is not a multiple of the page size, it is rounded to the next larger multiple of the page size. Например, если вы используете .NET Framework версии 2,0 в Windows Vista, минимальный размер стека (262 144 байт) — 64 КБ (65 536 байт).For example, if you are using the .NET Framework version 2.0 on Windows Vista, 256KB (262,144 bytes) is the minimum stack size, and the page size is 64KB (65,536 bytes).

Примечание

В версиях Microsoft Windows, предшествовавших Windows XP и Windows Server 2003, maxStackSize игнорируется, и используется размер стека, указанный в заголовке исполняемого файла.On versions of Microsoft Windows prior to Windows XP and Windows Server 2003, maxStackSize is ignored, and the stack size specified in the executable header is used.

Если указан очень малый размер стека, может потребоваться отключить проверку переполнения стека.If you specify a very small stack size, you might need to disable stack-overflow probing. Если стек сильно ограничен, проверка может привести к переполнению стека.When the stack is severely constrained, the probing can itself cause a stack overflow. Чтобы отключить проверку переполнения стека, добавьте следующий фрагмент в файл конфигурации приложения.To disable stack overflow probing, add the following to your application configuration file.

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

Thread(ThreadStart, Int32) Thread(ThreadStart, Int32) Thread(ThreadStart, Int32) Thread(ThreadStart, Int32)

Инициализирует новый экземпляр класса Thread, указывая максимальный размер стека для потока.Initializes a new instance of the Thread class, specifying the maximum stack size for the 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)

Параметры

start
ThreadStart ThreadStart ThreadStart ThreadStart

Делегат ThreadStart, указывающий на методы, которые вызываются при запуске потока.A ThreadStart delegate that represents the methods to be invoked when this thread begins executing.

maxStackSize
Int32 Int32 Int32 Int32

Максимальный размер стека в байтах, используемый потоком, или же 0 для использования максимального размера по умолчанию, указывается в заголовке исполняемого файла.The maximum stack size, in bytes, to be used by the thread, or 0 to use the default maximum stack size specified in the header for the executable.

Внимание! Для частично доверенного кода значение параметра maxStackSize игнорируется, если оно превышает размер стека по умолчанию.Important For partially trusted code, maxStackSize is ignored if it is greater than the default stack size. Исключение не возникает.No exception is thrown.

Исключения

Свойство start имеет значение null.start is null.

Значение параметра maxStackSize меньше нуля.maxStackSize is less than zero.

Комментарии

Старайтесь не использовать эту перегрузку конструктора.Avoid using this constructor overload. Размер стека по умолчанию, используемый перегрузкой конструктора Thread(ThreadStart), является рекомендуемым размером стека для потоков.The default stack size used by the Thread(ThreadStart) constructor overload is the recommended stack size for threads. Если в потоке имеются проблемы с памятью, наиболее вероятной причиной является ошибка программирования, например бесконечная рекурсия.If a thread has memory problems, the most likely cause is programming error, such as infinite recursion.

Важно!

Начиная с .NET Framework 4.NET Framework 4, только полностью доверенный код может установить maxStackSize в значение, превышающее размер стека по умолчанию (1 МБ).Beginning with the .NET Framework 4.NET Framework 4, only fully trusted code can set maxStackSize to a value that is greater than the default stack size (1 megabyte). Если для maxStackSize задано большее значение, если код работает с частичным доверием, maxStackSize игнорируется и используется размер стека по умолчанию.If a larger value is specified for maxStackSize when code is running with partial trust, maxStackSize is ignored and the default stack size is used. Исключение не возникает.No exception is thrown. Код на любом уровне доверия может установить maxStackSize в значение, меньшее, чем размер стека по умолчанию.Code at any trust level can set maxStackSize to a value that is less than the default stack size.

Примечание

Если вы разрабатываете полностью доверенную библиотеку, которая будет использоваться частично доверенным кодом, и вам нужно запустить поток, требующий большого стека, перед созданием потока необходимо подтвердить полное доверие, иначе будет использоваться размер стека по умолчанию.If you are developing a fully trusted library that will be used by partially trusted code, and you need to start a thread that requires a large stack, you must assert full trust before creating the thread, or the default stack size will be used. Не выполняя это действие, если не полностью контролируется код, выполняемый в потоке.Do not do this unless you fully control the code that runs on the thread.

Если maxStackSize меньше, чем минимальный размер стека, используется минимальный размер стека.If maxStackSize is less than the minimum stack size, the minimum stack size is used. Если maxStackSize не кратен размеру страницы, он округляется до следующего большего размера, кратного размеру страницы.If maxStackSize is not a multiple of the page size, it is rounded to the next larger multiple of the page size. Например, если вы используете .NET Framework версии 2,0 в Windows Vista, минимальный размер стека (262 144 байт) — 64 КБ (65 536 байт).For example, if you are using the .NET Framework version 2.0 on Windows Vista, 256KB (262,144 bytes) is the minimum stack size, and the page size is 64KB (65,536 bytes).

Примечание

В версиях Microsoft Windows, предшествовавших Windows XP и Windows Server 2003, maxStackSize игнорируется, и используется размер стека, указанный в заголовке исполняемого файла.On versions of Microsoft Windows prior to Windows XP and Windows Server 2003, maxStackSize is ignored, and the stack size specified in the executable header is used.

Если указан очень малый размер стека, может потребоваться отключить проверку переполнения стека.If you specify a very small stack size, you might need to disable stack-overflow probing. Если стек сильно ограничен, проверка может привести к переполнению стека.When the stack is severely constrained, the probing can itself cause a stack overflow. Чтобы отключить проверку переполнения стека, добавьте следующий фрагмент в файл конфигурации приложения.To disable stack overflow probing, add the following to your application configuration file.

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

Применяется к