Thread Конструкторы

Определение

Инициализирует новый экземпляр класса Thread.

Перегрузки

Имя Описание
Thread(ParameterizedThreadStart)

Инициализирует новый экземпляр Thread класса, указывая делегат, позволяющий передавать объект в поток при запуске потока.

Thread(ThreadStart)

Инициализирует новый экземпляр класса Thread.

Thread(ParameterizedThreadStart, Int32)

Инициализирует новый экземпляр Thread класса, указывая делегат, позволяющий передавать объект в поток при запуске потока и указывать максимальный размер стека для потока.

Thread(ThreadStart, Int32)

Инициализирует новый экземпляр Thread класса, указав максимальный размер стека для потока.

Thread(ParameterizedThreadStart)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Инициализирует новый экземпляр Thread класса, указывая делегат, позволяющий передавать объект в поток при запуске потока.

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

Делегат, представляющий методы, вызываемые при запуске этого потока.

Исключения

start равно null.

Примеры

В следующем примере показан синтаксис создания и использования делегата ParameterizedThreadStart со статическим методом и методом экземпляра.

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

Комментарии

Поток не начинает выполняться при создании. Чтобы запланировать выполнение потока, вызовите Start метод. Чтобы передать объект данных в поток, используйте перегрузку Start(Object) метода.

Note

Visual Basic пользователи могут опустить конструктор ThreadStart при создании потока. AddressOf Используйте оператор при передаче метода, напримерDim t As New Thread(AddressOf ThreadProc). Visual Basic автоматически вызывает конструктор ThreadStart.

См. также раздел

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

Thread(ThreadStart)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Инициализирует новый экземпляр класса 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)

Параметры

start
ThreadStart

Делегат ThreadStart , представляющий методы, вызываемые при запуске этого потока.

Исключения

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

Примеры

В следующем примере кода показано, как создать поток, выполняющий статический метод.

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

В следующем примере кода показано, как создать поток, выполняющий метод экземпляра.

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

Комментарии

Поток не начинает выполняться при создании. Чтобы запланировать выполнение потока, вызовите Start метод.

Note

Visual Basic пользователи могут опустить конструктор ThreadStart при создании потока. AddressOf Используйте оператор при передаче метода, напримерDim t As New Thread(AddressOf ThreadProc). Visual Basic автоматически вызывает конструктор ThreadStart.

См. также раздел

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

Thread(ParameterizedThreadStart, Int32)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Инициализирует новый экземпляр 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 , представляющий методы, вызываемые при запуске этого потока.

maxStackSize
Int32

Максимальный размер стека в байтах, используемый потоком, или 0 для использования максимального размера стека по умолчанию, указанного в заголовке исполняемого файла.

Важно, чтобы частично доверенный код не учитывается, maxStackSize если он больше размера стека по умолчанию. Исключение не возникает.

Исключения

start равно null.

maxStackSize меньше нуля.

Комментарии

Избегайте использования этой перегрузки конструктора. Размер стека по умолчанию, используемый Thread(ParameterizedThreadStart) перегрузкой конструктора, — это рекомендуемый размер стека для потоков. Если поток имеет проблемы с памятью, скорее всего, это ошибка программирования, например бесконечное рекурсии.

Important

Начиная с платформы .NET Framework 4, только полностью доверенный код может задать значение maxStackSize значением, превышающим размер стека по умолчанию (1 мегабайт). Если при выполнении кода с частичным доверием указано maxStackSize большее значение, maxStackSize игнорируется и используется размер стека по умолчанию. Исключение не возникает. Код на любом уровне доверия может задать maxStackSize значение, которое меньше размера стека по умолчанию.

Note

Если вы разрабатываете полностью надежную библиотеку, которая будет использоваться частично доверенным кодом, и необходимо запустить поток, требующий большого стека, необходимо подтвердить полное доверие перед созданием потока, или будет использоваться размер стека по умолчанию. Не используйте это, если вы не полностью управляете кодом, который выполняется в потоке.

Если maxStackSize меньше минимального размера стека, используется минимальный размер стека. Если maxStackSize размер страницы не равен крату, он округляется до следующего большего размера страницы.

Note

В версиях Microsoft Windows до Windows XP и Windows Server 2003 maxStackSize игнорируется, а размер стека, указанный в заголовке исполняемого файла, используется.

Если указать очень маленький размер стека, может потребоваться отключить стек-переполнение пробы. Если стек сильно ограничен, проверка может вызвать переполнение стека. Чтобы отключить проверка переполнения стека, добавьте следующее в файл конфигурации приложения в приложении .NET Framework.

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

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

Thread(ThreadStart, Int32)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Инициализирует новый экземпляр 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 , представляющий методы, вызываемые при запуске этого потока.

maxStackSize
Int32

Максимальный размер стека в байтах, используемый потоком, или 0 для использования максимального размера стека по умолчанию, указанного в заголовке исполняемого файла.

Важно, чтобы частично доверенный код не учитывается, maxStackSize если он больше размера стека по умолчанию. Исключение не возникает.

Исключения

start равно null.

maxStackSize меньше нуля.

Комментарии

Избегайте использования этой перегрузки конструктора. Размер стека по умолчанию, используемый Thread(ThreadStart) перегрузкой конструктора, — это рекомендуемый размер стека для потоков. Если поток имеет проблемы с памятью, скорее всего, это ошибка программирования, например бесконечное рекурсии.

Important

Начиная с платформы .NET Framework 4, только полностью доверенный код может задать значение maxStackSize значением, превышающим размер стека по умолчанию (1 мегабайт). Если при выполнении кода с частичным доверием указано maxStackSize большее значение, maxStackSize игнорируется и используется размер стека по умолчанию. Исключение не возникает. Код на любом уровне доверия может задать maxStackSize значение, которое меньше размера стека по умолчанию.

Note

Если вы разрабатываете полностью надежную библиотеку, которая будет использоваться частично доверенным кодом, и необходимо запустить поток, требующий большого стека, необходимо подтвердить полное доверие перед созданием потока, или будет использоваться размер стека по умолчанию. Не используйте это, если вы не полностью управляете кодом, который выполняется в потоке.

Если maxStackSize меньше минимального размера стека, используется минимальный размер стека. Если maxStackSize размер страницы не равен крату, он округляется до следующего большего размера страницы. Например, если вы используете платформу .NET Framework версии 2.0 на Windows Vista, 256 КБ (262 144 байт) — минимальный размер стека, а размер страницы — 64 КБ (65 536 байт).

Note

В версиях Microsoft Windows до Windows XP и Windows Server 2003 maxStackSize игнорируется, а размер стека, указанный в заголовке исполняемого файла, используется.

Если указать очень маленький размер стека, может потребоваться отключить стек-переполнение пробы. Если стек сильно ограничен, проверка может вызвать переполнение стека. Чтобы отключить проверка переполнения стека, добавьте следующее в файл конфигурации приложения в приложении .NET Framework.

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

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