Maison 2023. 10. 11. 11:00

<1. Thread >

<2. Thread의 메서드를 델리게이트로 지정하는 방법 >

<3. 델리게이트란? >

 

Thread 기본 사용법

 

- Thread 클래스의 생성자에 실행하고자 하는 메서드를 델리게이트로 지정한 후, Thread 클래스 객체에서 Start() 메서드를 호출하면 새로운 쓰레드가 생성되어 실행되게 된다.

Thread t1 = new Thread(new ThreadStart(Run));
t1.Start();

void Run(){
	Console.WriteLine("RUN");
}

Thread 실행 예제

 

 

<2. Thread의 메서드를 델리게이트로 지정하는 방법 >

 

- Thread를 구동시키기 위해선 Thread가 구동할 메서드를 갖고 있어야한다.

- Thread를 생성할시 델리게이트로 메서드를 할당받아야한다.

 

- Thread는 ThreadStart로 파라미터가 없는 델리게이트와 ParameterizedThreadStart로 파라미터를 전달하는 델리게이트를 사용할 수 있다.

 

ParameterizedThreadStart는 public delegate void ParameterizedThreadStart(object obj); 로 정의되어있는데,

object를 전달하고 return값이 없다.

 

// object를 Start 메서드를 호출할때 받는다.
Thread t2 = new Thread(new ParameterizedThreadStart(Calc));
t2.Start(10.0); 

//radius라는 파라미터를 object 타입으로 받아들임.
static void Calc(object radius)
{
	Console.WriteLine(radius);
}

 

 

 

 

< 델리게이트 란? >

- 메서드를 참조하는 대리자.

- 메서드의 주소를 할당한 후, 델리게이트를 호출하면 할당된 메서드를 호출함.

public delegate int CustomDelegate(int a, int b);

pubic int sum(int a, int b)
{
	return a+b;
}

public void Test()
{
	 // sum 메서드 주소를 CustomDelegate에 할당.
	CustomDelegate = sum
	int res = CustomDelegate(1,2);
    
	// res = 3이 출력됨.
	Console.WriteLine(res); 
}

델리게이트 예제

 

-> 목적은 메서드를 매개변수로 사용할 수 있게 하는장치

public delegate void CustomDelegate(bool flag);
bool isLogin = false;
void Test()
{
	Login();
    LogOut();
}

void Login()
{
	Process(isLogin,LoginCallback);
}

void LogOut()
{
	Process(!isLogin,LogOutCallback);
}

void LoginCallback(bool isSuccess)
{
	if(isSuccess)
    	isLogin=true;
        
    Console.WriteLine("Login Status : "+isLogin);
}

void LogOutCallback(bool isSuccess)
{
	if(isSuccess)
    	isLogin=false;
        
    Console.WriteLine("LogOut Status : "+isLogin);
}

void Process(bool isSuccess,CustomDelegate callback)
{
	callback(isSuccess);
}

델리게이트를 활용하여 메서드를 매개변수로 받은 예