none
Thread 및 ThreadPool 사용 시 매개변수 RRS feed

  • 질문

  • Thread 및 ThreadPool 사용시 Thread 가 호출해주는 메소드의 매개인자를 여러개 또는 배열 형태로 줄 수 있는 방법은 없나요?
    2012년 9월 19일 수요일 오후 3:36

답변

  • 일반적으로 Thread호출은

    Thread th = new Thread(new ThreadStart(test));
     
    th.Start();

    이런식으로 하게 되는데요. 파라미터가 있는경우는

    Thread th = new Thread(new ParameterizedThreadStart(test));
     
    th.Start("Hello World");
    
    public void test(string s)
     
    {
     
      ...//수행할 Thread내용 (s="Hello World")
     
    }

    ParameterizedThreadStart를 통해서 수행할 Method를 호출해주고 Start시에 파라미터를 전달해줍니다.

    질문하신 내용은 이런식으로 가능할것 같습니다.

    Thread th = new Thread(new ParameterizedThreadStart(test));
     
    th.Start(new string[]{"Hello World","Hello You"},new int[]{1,2,3,4},"test");
    
    public void test(string[] sArr, int[] iArr, string s)
     
    {
     
      ...//수행할 Thread내용 
     
    }
        string p1 = "string param."; 
        long p2 = 1234567; 
        int p3 = 1234; 
        object args = new object[3] { p1, p2, p3 }; 
        Thread b1 = new Thread(new ParameterizedThreadStart(test)); 
        b1.Start(args); 
        ... 
        private void test(object args) 
        { 
          Array argArray = new object[3]; 
          argArray = (Array)args; 
          string p1 = (string)argArray.GetValue(0); 
          long p2 = (long)argArray.GetValue(1); 
          int p3 = (int)argArray.GetValue(2); 
          ...//수행할 Thread내용  
        }
    

    람다표현 이런식으로도 가능합니다.

    Thread th = new Thread(unused => test(new string[]{"Hello World","Hello You"},new int[]{1,2,3,4},"test"));
     
    th.Start();
    
    public void test(string[] sArr, int[] iArr, string s)
     
    {
     
      ...//수행할 Thread내용 
     
    }

    • 답변으로 표시됨 채성식 2012년 9월 20일 목요일 오전 5:17
    2012년 9월 20일 목요일 오전 1:21