Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Делегат ThreadStart

 

Опубликовано: Октябрь 2016

Представляет метод, который выполняется на Thread.

Пространство имен:   System.Threading
Сборка:  mscorlib (в mscorlib.dll)

[ComVisibleAttribute(true)]
public delegate void ThreadStart()

При создании управляемого потока метод, который выполняется в потоке представленного ThreadStart делегировать или ParameterizedThreadStart делегат, передаваемый Thread конструктор. Поток начинает выполнение до Thread.Start вызывается метод. Выполнение начинается в первой строке метода, представленного ThreadStart или ParameterizedThreadStart делегат.

System_CAPS_noteПримечание

Пользователи Visual Basic и C# можно опустить ThreadStart или ParameterizedThreadStart конструктора делегата при создании потока. В Visual Basic, используйте AddressOf оператор при передаче в метод Thread конструктор, например Dim t As New Thread(AddressOf ThreadProc). В C# просто укажите имя процедуры потока. Компилятор выбирает соответствующий конструктор делегата.

[C++]

System_CAPS_noteПримечание

В версии 2.0 платформы .NET Framework создание ThreadStart делегат для статического метода C++ требуется только один параметр: адрес метода обратного вызова, полное имя класса. В более ранних версиях требовалось два параметра при создании делегата для статического метода: 0 (ноль) и адрес метода. Для метода экземпляра всех версиях требуется два параметра: переменная экземпляра и адрес метода.

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

Другой простой пример, демонстрирующий создание ThreadStart Делегировать см. в разделе Thread.Start() перегрузка метода. Дополнительные сведения о создании потоков см. в разделе Creating Threads and Passing Data at Start Time.

using System;
using System.Threading;

class Test
{
    static void Main() 
    {
        // To start a thread using a static thread procedure, use the
        // class name and method name when you create the ThreadStart
        // delegate. Beginning in version 2.0 of the .NET Framework,
        // it is not necessary to create a delegate explicitly. 
        // Specify the name of the method in the Thread constructor, 
        // and the compiler selects the correct delegate. For example:
        //
        // Thread newThread = new Thread(Work.DoWork);
        //
        ThreadStart threadDelegate = new ThreadStart(Work.DoWork);
        Thread newThread = new Thread(threadDelegate);
        newThread.Start();

        // To start a thread using an instance method for the thread 
        // procedure, use the instance variable and method name when 
        // you create the ThreadStart delegate. Beginning in version
        // 2.0 of the .NET Framework, the explicit delegate is not
        // required.
        //
        Work w = new Work();
        w.Data = 42;
        threadDelegate = new ThreadStart(w.DoMoreWork);
        newThread = new Thread(threadDelegate);
        newThread.Start();
    }
}

class Work 
{
    public static void DoWork() 
    {
        Console.WriteLine("Static thread procedure."); 
    }
    public int Data;
    public void DoMoreWork() 
    {
        Console.WriteLine("Instance thread procedure. Data={0}", Data); 
    }
}

/* This code example produces the following output (the order 
   of the lines might vary):
Static thread procedure.
Instance thread procedure. Data=42
 */

.NET Framework
Доступно с 1.1
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Вернуться в начало
Показ: