ParameterizedThreadStart 대리자

정의

Thread에서 실행되는 메서드를 나타냅니다.Represents the method that executes on a 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);
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)

매개 변수

obj
Object

스레드 프로시저의 데이터가 들어 있는 개체입니다.An object that contains data for the thread procedure.

상속
ParameterizedThreadStart
특성

예제

다음 코드 예제에서는 ParameterizedThreadStart 대리자를 사용 하 여 정적 메서드와 인스턴스 메서드를 실행 합니다.The following code example uses a ParameterizedThreadStart delegate to execute a static method and an instance method. 첫 번째 ParameterizedThreadStart 대리자는 정적 DoWork 메서드로 표시 되 고 두 번째 대리자는 instance DoMoreWork 메서드로 표시 됩니다.The first ParameterizedThreadStart delegate is represented by the static DoWork method and the second is represented by the instance DoMoreWork method. 두 메서드는 모두 ParameterizedThreadStart 대리자 시그니처와 일치 합니다. 즉, Object 형식의 단일 매개 변수가 있으며 값을 반환 하지 않습니다.Both methods match the ParameterizedThreadStart delegate signature; that is, they have a single parameter of type Object and don't return a value.

참고

Visual Basic 및 C# 컴파일러는 DoWorkDoMoreWork 메서드의 시그니처에서 ParameterizedThreadStart 대리자를 유추 하 고 올바른 생성자를 호출 합니다.The Visual Basic and C# compilers infer the ParameterizedThreadStart delegate from the signatures of the DoWork and DoMoreWork methods, and call the correct constructor. 따라서 코드에서 명시적 생성자를 호출 하지 있습니다.Thus, there is no explicit constructor call in the code.

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.'

설명

관리 되는 스레드를 만들면 스레드에서 실행 되는 메서드는으로 표현 됩니다.When a managed thread is created, the method that executes on the thread is represented by:

스레드가 실행 될 때까지 시작 하지는 Thread.Start 메서드가 호출 됩니다.The thread does not begin executing until the Thread.Start method is called. ThreadStart 또는 ParameterizedThreadStart 대리자가 스레드에서 호출 되 고 실행이 대리자가 나타내는 메서드의 첫 번째 줄에서 시작 됩니다.The ThreadStart or ParameterizedThreadStart delegate is invoked on the thread, and execution begins at the first line of the method represented by the delegate. ParameterizedThreadStart 대리자의 경우 Start(Object) 메서드에 전달 되는 개체는 대리자에 게 전달 됩니다.In the case of the ParameterizedThreadStart delegate, the object that is passed to the Start(Object) method is passed to the delegate.

참고

Visual Basic 및 C# 사용자를 생략할 수는 ThreadStart 또는 ParameterizedThreadStart 스레드를 만드는 경우 대리자 생성자입니다.Visual Basic and C# users can omit the ThreadStart or ParameterizedThreadStart delegate constructor when creating a thread. Visual Basic에서 사용 하 여는 AddressOf 메서드를 전달 하는 경우 연산자는 Thread 생성자; 예를 들어 Dim t As New Thread(AddressOf ThreadProc)합니다.In Visual Basic, use the AddressOf operator when passing your method to the Thread constructor; for example, Dim t As New Thread(AddressOf ThreadProc). C#에서 스레드 프로시저의 이름을 지정 하면 됩니다.In C#, simply specify the name of the thread procedure. 컴파일러는 올바른 대리자 생성자를 선택 합니다.The compiler selects the correct delegate constructor.

참고

에서 C++인스턴스 메서드에 대 한 ParameterizedThreadStart 대리자를 만들 때 생성자의 첫 번째 매개 변수는 인스턴스 변수입니다.When you create a ParameterizedThreadStart delegate for an instance method in C++, the first parameter of the constructor is the instance variable. 정적 메서드를 생성자의 첫 번째 매개 변수는 0입니다.For a static method, the first parameter of the constructor is zero. 정적 메서드를 대리자 생성자 매개 변수는 하나만 필요 합니다: 콜백 메서드, 클래스 이름으로 정규화 된 주소입니다.For a static method, the delegate constructor requires only one parameter: the address of the callback method, qualified by the class name.

ParameterizedThreadStart 대리자 및 Thread.Start(Object) 메서드 오버 로드를 사용 하면 데이터를 스레드 프로시저에 쉽게 전달할 수 있지만이 기법은 Thread.Start(Object)에 전달 될 수 있으므로 형식이 안전 하지 않습니다.The ParameterizedThreadStart delegate and the Thread.Start(Object) method overload make it easy to pass data to a thread procedure, but this technique is not type safe because any object can be passed to Thread.Start(Object). 스레드 프로시저에 데이터를 전달 하는 보다 강력한 방법 작업자 개체로 스레드 프로시저 및 데이터 필드를 배치 하는 경우A more robust way to pass data to a thread procedure is to put both the thread procedure and the data fields into a worker object. 자세한 내용은 스레드 만들기 및 시작 시 데이터 전달을 참조 하세요.For more information, see Creating Threads and Passing Data at Start Time.

ParameterizedThreadStart 대리자는 단일 매개 변수만 지원 합니다.The ParameterizedThreadStart delegate supports only a single parameter. 다음 중 하나를 수행 하 여 여러 데이터 항목을 ParameterizedThreadStart에 전달할 수 있습니다.You can pass multiple data items to the ParameterizedThreadStart by making that parameter one of the following:

  • 배열입니다.An array.

  • 컬렉션 형식-동일한 형식의 경우 모든 데이터 항목입니다.A collection type, if all of the data items are of the same type.

  • Tuple<T1,T2> 또는 Tuple<T1,T2,T3,T4>와 같은 튜플 형식입니다.A tuple type, such as Tuple<T1,T2> or Tuple<T1,T2,T3,T4>.

확장 메서드

GetMethodInfo(Delegate)

지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다.Gets an object that represents the method represented by the specified delegate.

적용 대상

추가 정보