ParameterizedThreadStart 대리자
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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.'
설명
관리되는 스레드를 만들 때 스레드에서 실행되는 메서드는 다음으로 표시됩니다.
ThreadStart 생성자에 전달되는 Thread.Thread(ThreadStart) 대리자입니다. 매개 변수가 없고 C#으로 반환
void
되거나 Visual Basic 프로시저인Sub
메서드는 대리자를 나타낼 수 있습니다.ParameterizedThreadStart 생성자에 전달되는 Thread.Thread(ParameterizedThreadStart) 대리자입니다. 형식 Object 의 단일 매개 변수가 있고 C#에서 void를 반환하거나 Visual Basic Sub 프로시저인 메서드는 대리자를 나타낼 수 있습니다.
스레드가 실행 될 때까지 시작 하지는 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) |
지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다. |