다음을 통해 공유


ParameterizedThreadStart 대리자

정의

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

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

매개 변수

obj
Object

스레드 프로시저의 데이터가 들어 있는 개체입니다.

특성

예제

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

참고

Visual Basic 및 C# 컴파일러는 및 메서드의 DoWork DoMoreWork 서명에서 대리자를 유추 ParameterizedThreadStart 하고 올바른 생성자를 호출합니다. 따라서 코드에는 명시적 생성자 호출이 없습니다.

using namespace System;
using namespace System::Threading;

namespace SystemThreadingExample
{
    public ref class Work
    {
    public:
        void StartThreads()
        {
            // Start a thread that calls a parameterized static method.
            Thread^ newThread = gcnew
                Thread(gcnew ParameterizedThreadStart(Work::DoWork));
            newThread->Start(42);
              
            // Start a thread that calls a parameterized instance method.
            Work^ someWork = gcnew Work;
            newThread = gcnew Thread(
                        gcnew ParameterizedThreadStart(someWork,
                        &Work::DoMoreWork));
            newThread->Start("The answer.");
        }

        static void DoWork(Object^ data)
        {
            Console::WriteLine("Static thread procedure. Data='{0}'", 
                data);
        }

        void DoMoreWork(Object^ data)
        {
            Console::WriteLine("Instance thread procedure. Data='{0}'", 
                data);
        }
    };
}

//Entry point of example application
int main()
{
    SystemThreadingExample::Work^ samplework = 
        gcnew SystemThreadingExample::Work();
    samplework->StartThreads();
}
// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
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에서 사용 하 여는 AddressOf 메서드를 전달 하는 경우 연산자는 Thread 생성자; 예를 들어 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>.

확장 메서드

GetMethodInfo(Delegate)

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

적용 대상

추가 정보