Thread.Start 메서드

정의

스레드를 실행하도록 예약합니다.

오버로드

Name Description
Start()

운영 체제에서 현재 인스턴스의 상태를 .로 변경합니다 Running.

Start(Object)

운영 체제에서 현재 인스턴스의 상태를 변경하고 Running필요에 따라 스레드가 실행하는 메서드에서 사용할 데이터가 포함된 개체를 제공합니다.

Start()

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
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 차단하지 않습니다.

메모

대리자를 사용하여 만든 스레드에서 이 오버로드를 ParameterizedThreadStartnull 사용하는 경우 스레드에서 실행하는 메서드에 전달됩니다.

스레드가 종료되면 다른 호출 Start을 사용하여 다시 시작할 수 없습니다.

추가 정보

적용 대상

Start(Object)

Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
Thread.cs
Source:
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 대리자를 사용하면 데이터를 스레드 프로시저에 쉽게 전달할 수 있지만 개체를 이 오버로드에 전달할 수 있으므로 이 기술은 형식이 안전하지 않습니다. 스레드 프로시저에 데이터를 전달하는 보다 강력한 방법은 스레드 프로시저와 데이터 필드를 작업자 개체에 둘 다 배치하는 것입니다. 자세한 내용은 스레드 만들기 및 시작 시간에 데이터 전달을 참조하세요.

추가 정보

적용 대상