2011-08-28 5 views
0

나는 어디에서나 검색해 왔으며 매개 변수를 수용하는 특정 기능을 가진 200-300 개의 작업을 추가 할 수있는 솔루션이 필요합니다. 대리자 및 단일 매개 변수로 개체에 대해 알고 있지만 개체 parametar 대신 다른 paramentars 함께 작업을 각각 큐에 수 있도록 뭔가 기대했다.스레드 풀 매개 변수

도움을 주시면 감사하겠습니다.

답변

2

당신이 뭔가를 할 수 있습니다

void MyMethod(int param) 
{ 
    .... 
} 

... 

ThreadPool.QueueUserWorkItem(_ => MyMethod(1)); 
ThreadPool.QueueUserWorkItem(_ => MyMethod(2)); 
ThreadPool.QueueUserWorkItem(_ => MyMethod(3)); 
... 
ThreadPool.QueueUserWorkItem(_ => MyMethod(42)); 
또 다른 옵션은 유형 Object의 매개 변수를 받아 MyMethod을하고, QueueUserWorkItem의 두 번째 오버로드를 사용하는 것입니다

:

void MyMethod(object param) 
{ 
    int value = (int)param; 
    .... 
} 

... 

ThreadPool.QueueUserWorkItem(MyMethod, 1); 
ThreadPool.QueueUserWorkItem(MyMethod, 2); 
ThreadPool.QueueUserWorkItem(MyMethod, 3); 
... 
ThreadPool.QueueUserWorkItem(MyMethod, 42); 
0

개체 목록을 개체 매개 변수로 보내지 못하도록하는 것이 없으므로 실제로는 여러 매개 변수를 스레드 함수에 전달할 수 있습니다.

0

당신이 찾고있는을 매개 변수화 된 스레드 시작 (아래 예제)

string myUrl = 'asd' 
Thread t = new Thread (new ParameterizedThreadStart(FetchUrl)); 
t.Start (myUrl); 


static void FetchUrl(object url) 
{ 
    // use url here, probably casting it to a known type before use 
} 

또는 System.Threading.Tasks에서 발견 작업을 사용할 수 있습니다 ..

Task.Factory.StartNew(() => { 
        File.WriteAllBytes(path, response); 
       }); 
1

간단한 샘플 :

 for (int i = 0; i < 100; i++) 
     { 
      System.Threading.ThreadPool.QueueUserWorkItem(k => 
      { 
       TestMethod(k); 
      }, i); 
     }