Thread.Start Метод

Определение

Приводит к планированию выполнения потока.

Перегрузки

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

Вызывает изменение состояния текущего экземпляра Runningоперационной системой.

Start(Object)

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

Start()

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

Вызывает изменение состояния текущего экземпляра Runningоперационной системой.

public:
 void Start();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void Start();
public void Start();
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.Start : unit -> unit
member this.Start : unit -> unit
Public Sub Start ()
Атрибуты

Исключения

Поток уже запущен.

Для запуска этого потока недостаточно памяти.

Примеры

В следующем примере создается и запускается поток.

using System;
using System.Threading;

public class ThreadWork
{
   public static void DoWork()
   {
      for(int i = 0; i<3;i++) {
         Console.WriteLine("Working thread...");
         Thread.Sleep(100);
      }
   }
}
class ThreadTest
{
   public static void Main()
   {
      Thread thread1 = new Thread(ThreadWork.DoWork);
      thread1.Start();
      for (int i = 0; i<3; i++) {
         Console.WriteLine("In main.");
         Thread.Sleep(100);
      }
   }
}
// The example displays output like the following:
//       In main.
//       Working thread...
//       In main.
//       Working thread...
//       In main.
//       Working thread...
open System.Threading

module ThreadWork = 
    let doWork () =
        for _ = 0 to 2 do 
            printfn "Working thread..."
            Thread.Sleep 100

let thread1 = Thread ThreadWork.doWork
thread1.Start()
for _ = 0 to 2 do 
    printfn "In main."
    Thread.Sleep 100

// The example displays output like the following:
//       In main.
//       Working thread...
//       In main.
//       Working thread...
//       In main.
//       Working thread...
Imports System.Threading

Public Class ThreadWork
   Public Shared Sub DoWork()
      Dim i As Integer
      For i = 0 To 2
         Console.WriteLine("Working thread...")
         Thread.Sleep(100)
      Next i
   End Sub
End Class

Class ThreadTest
   Public Shared Sub Main()
      Dim thread1 As New Thread(AddressOf ThreadWork.DoWork)
      thread1.Start()
      Dim i As Integer
      For i = 0 To 2
         Console.WriteLine("In main.")
         Thread.Sleep(100)
      Next
   End Sub
End Class
' The example displays output like the following:
'       In main.
'       Working thread...
'       In main.
'       Working thread...
'       In main.
'       Working thread...

Комментарии

После того как поток находится в ThreadState.Running состоянии, операционная система может запланировать его выполнение. Поток начинает выполняться в первой строке метода, ThreadStart представленной конструктором потока или ParameterizedThreadStart делегатом. Обратите внимание, что вызов Start не блокирует вызывающий поток.

Note

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

После завершения потока его невозможно перезапустить с помощью другого вызова Start.

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

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

Start(Object)

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

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

public:
 void Start(System::Object ^ parameter);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void Start(object? parameter);
public void Start(object? parameter);
public void Start(object parameter);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.Start : obj -> unit
member this.Start : obj -> unit
Public Sub Start (parameter As Object)

Параметры

parameter
Object

Объект, содержащий данные, используемые методом, который выполняется потоком.

Атрибуты

Исключения

Поток уже запущен.

Для запуска этого потока недостаточно памяти.

Этот поток был создан с помощью ThreadStart делегата вместо делегата ParameterizedThreadStart .

Примеры

В следующем примере создается 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.'

Комментарии

После того как поток находится в ThreadState.Running состоянии, операционная система может запланировать его выполнение. Поток начинает выполняться в первой строке метода, ThreadStart представленной конструктором потока или ParameterizedThreadStart делегатом. Обратите внимание, что вызов Start не блокирует вызывающий поток.

После завершения потока его невозможно перезапустить с помощью другого вызова Start.

Эта перегрузка ParameterizedThreadStart и делегат упрощают передачу данных в процедуру потока, но метод не является безопасным, так как любой объект можно передать в эту перегрузку. Более надежный способ передачи данных в процедуру потока заключается в том, чтобы поместить процедуру потока и поля данных в рабочий объект. Дополнительные сведения см. в разделе "Создание потоков и передача данных во время начала".

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

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