2009-10-10 3 views
1

저는 초보자입니다. "ParameterizedThreadStart"는 인수로 단일 객체를 허용합니다.스레드의 매개 변수 처리

다른 대리인 서명이 있습니까 스레드에

(1) 통과 PARAMS (매개 변수의 변수 번호) 나를 수 있습니다?

(2) list와 같은 일반적인 매개 변수를 지원합니까?

답변

5

당신은 당신이 단일 개체로 원하는 모든 작업을 수행 할 수 있습니다합니다. 그냥 당신이 관심있는 매개 변수를 래핑하는 클래스를 정의 : 제네릭,

class ThreadState 
{ 
    public ThreadState() 
    { 
    } 

    public string Name 
    { 
     get; 
     set; 
    } 

    public int Age 
    { 
     get; 
     set; 
    } 
} 

// ... 

ParameterizedThreadStart start = delegate(object objThreadState) 
{ 
    // cast to your actual object type 
    ThreadState state = (ThreadState)objThreadState; 

    // ... now do anything you want with it ... 
}; 
+0

또는 객체 배열을 전달하십시오. –

+0

예, 배열을 전달할 수도 있습니다.이 경우 가볍지 만 "형식 안전"은 적습니다. – bobbymcr

+0

정말 많이 도와 줬어. 고마워. – user186973

2

당신은 어떤 매개 변수를 전달하는 Delegate.BeginInvoke 및 EndInvoke를 사용할 수 있습니다 당신은

delegate long MyFuncDelegate(int N); 

MyFuncDelegate cpn = new MyFuncDelegate(MyFunc); 

IAsyncResult ar = cpn.BeginInvoke(3, null, null); 

// Do some stuff 
while(!ar.IsCompleted) 
{ 
    // Do some stuff 
} 

// we now know that the call is 
// complete as IsCompleted has 
// returned true 
long answer = cpn.EndInvoke(ar); 
0

덧붙여, 그러한가 등 행위자 (T1의), 행위자 (T1의, T2)로 클래스를 정의하는 것이 유용 분야 예 V1은 T1, V2는 T2 등으로, Action (Of T1, T2) 등은 Action (V1, V2) 및 static factory 메소드를 호출하는 Exec (void) 등의 단일 메소드입니다. 따라서 VS2005에서도 적절한 매개 변수를 사용하여 함수를 호출하는 MethodInvoker를 매우 쉽게 어셈블 할 수 있습니다.