Thread.Start 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
스레드를 실행하도록 예약합니다.
오버로드
| 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 대리자를 사용하면 데이터를 스레드 프로시저에 쉽게 전달할 수 있지만 개체를 이 오버로드에 전달할 수 있으므로 이 기술은 형식이 안전하지 않습니다. 스레드 프로시저에 데이터를 전달하는 보다 강력한 방법은 스레드 프로시저와 데이터 필드를 작업자 개체에 둘 다 배치하는 것입니다. 자세한 내용은 스레드 만들기 및 시작 시간에 데이터 전달을 참조하세요.