ParameterizedThreadStart 대리자

정의

에서 실행되는 메서드를 Thread나타냅니다.

public delegate void ParameterizedThreadStart(System::Object ^ obj);
[System.Runtime.InteropServices.ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
public delegate void ParameterizedThreadStart(object obj);
[<System.Runtime.InteropServices.ComVisible(false)>]
type ParameterizedThreadStart = delegate of obj -> unit
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)

매개 변수

obj
Object

스레드 프로시저에 대한 데이터를 포함하는 개체입니다.

특성

예제

다음 코드 예제에서는 대리자를 ParameterizedThreadStart 사용하여 정적 메서드와 인스턴스 메서드를 실행합니다. 첫 번째 ParameterizedThreadStart 대리자는 정적 DoWork 메서드로 표현되고 두 번째 대리자는 인스턴스 DoMoreWork 메서드로 표시됩니다. 두 메서드 모두 대리자 ParameterizedThreadStart 서명과 일치합니다. 즉, 형식 Object 의 매개 변수가 하나이고 값을 반환하지 않습니다.

메모

Visual Basic 및 C# 컴파일러는 DoWorkDoMoreWork 메서드의 서명에서 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.'
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.'

설명

관리되는 스레드를 만들 때 스레드에서 실행되는 메서드는 다음으로 표시됩니다.

스레드는 메서드가 호출될 때까지 Thread.Start 실행을 시작하지 않습니다. ThreadStart 스레드에서 또는 ParameterizedThreadStart 대리자가 호출되고 대리자가 나타내는 메서드의 첫 번째 줄에서 실행이 시작됩니다. 대리자의 ParameterizedThreadStart 경우 메서드에 Start(Object) 전달되는 개체가 대리자에게 전달됩니다.

메모

Visual Basic 및 C# 사용자는 스레드를 만들 때 ThreadStart 또는 ParameterizedThreadStart 대리자 생성자를 생략할 수 있습니다. Visual Basic 메서드를 Thread 생성자에 전달할 때 AddressOf 연산자(예: Dim t As New Thread(AddressOf ThreadProc))를 사용합니다. C#에서 스레드 프로시저의 이름을 지정하기만 하면됩니다. 컴파일러가 올바른 대리자 생성자를 선택합니다.

메모

C++에서 인스턴스 메서드에 대한 대리자를 만들 ParameterizedThreadStart 때 생성자의 첫 번째 매개 변수는 인스턴스 변수입니다. 정적 메서드의 경우 생성자의 첫 번째 매개 변수는 0입니다. 정적 메서드의 경우 대리자 생성자에는 클래스 이름으로 한정된 콜백 메서드의 주소라는 매개 변수가 하나만 필요합니다.

ParameterizedThreadStart 대리자와 Thread.Start(Object) 메서드 오버로드를 사용하면 스레드 프로시저에 데이터를 쉽게 전달할 수 있지만 개체를 전달할 Thread.Start(Object)수 있으므로 이 기술은 형식이 안전하지 않습니다. 스레드 프로시저에 데이터를 전달하는 보다 강력한 방법은 스레드 프로시저와 데이터 필드를 작업자 개체에 둘 다 배치하는 것입니다. 자세한 내용은 스레드 만들기 및 시작 시간에 데이터 전달을 참조하세요.

대리자는 ParameterizedThreadStart 단일 매개 변수만 지원합니다. 해당 매개 변수를 ParameterizedThreadStart 다음 중 하나로 만들어 여러 데이터 항목을 전달할 수 있습니다.

  • 배열입니다.
  • 모든 데이터 항목이 동일한 형식인 경우 컬렉션 형식입니다.
  • 튜플 형식(예: Tuple<T1,T2> 또는 Tuple<T1,T2,T3,T4>.

확장명 메서드

Name Description
GetMethodInfo(Delegate)

지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다.

적용 대상

추가 정보