Development Tip

C# Thread 함수에 Parameter 전달하기

MoonLight314 2024. 3. 2. 09:38
728x90

안녕하세요, MoonLight입니다.

오늘은 C#에서 Thread 함수를 만들어서 사용할 때, Parameter를 넘기는 방법에 대해서 알아보도록 하겠습니다.

언뜻 떠오르는 방법은 Class 변수를 전역 변수처럼 사용해서 사용하는 방법이 있을 수 있겠습니다.

하지만, 뭔가 세련되지 못한 듯한 느낌이 오죠?

제가 오늘 소개해 드릴 방법은 ParameterizedThreadStart Class를 사용하는 방법입니다.

ParameterizedThreadStart Class 사용법을 예제 Code로 한 번 알아보도록 하겠습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int Param = 7;

            Thread TestThread = new Thread(new ParameterizedThreadStart(StartTest));
            TestThread.Start(Param);

            TestThread.Join();

            Console.WriteLine("Completed");
        }

        private static void StartTest(object Parameter)
        {
            int LastNum = (int)Parameter;

            for(int i=0; i<LastNum; i++)
            {
                Console.WriteLine(i.ToString());
            }
        }
    }
    
}

위의 예제는 'Param'이라는 int 변수값을 받아서 Thread Function에서 0부터 Param까지 출력하는 예제입니다.

'Param'이라는 int 변수를 Thread 함수 Call할 때 같이 넘겨주고 싶습니다.

먼저 아래와 같이 내가 사용할 Thread Function이 Parameter를 넘겨줄 것이라는 것을 ParameterizedThreadStart을 이용해서 미리 알려줍니다.

Thread TestThread = new Thread(new ParameterizedThreadStart(StartTest));

그리고, Thread.Start()를 Call할 때 원하는 Parameter를 넘겨주면 됩니다.

TestThread.Start(Param);

그리고, 실제 Thread Function에서 Parameter를 받을 때는 아래와 같이 object로 넘어오는데,

처음 선언한 변수 Type으로 Casting해서 사용하면 됩니다.

private static void StartTest(object Parameter)
{
    int LastNum = (int)Parameter;

    for(int i=0; i<LastNum; i++)
    {
        Console.WriteLine(i.ToString());
    }
}

이 예제에서는 int 변수를 사용했기 때문에 사용할 때는 (int)로 Casting해서 사용했습니다.

오늘은 Thread Function에 Parameter를 넘기는 방법에 대해서 알아보았는데요,

간단한데, 모르면 답답하죠.

도움이 되셨으면 좋겠구요, 다음에 또 만나요~!

728x90