<meta name="GENERATOR" content="DEXTWebEditor" /><meta name="GENERATOR" content="DEXTWebEditor" />

 

데브피아에서 발췌한 내용입니다.^^

 

C# 스레드사용시 메서드이름이필요합니다?;오류가떠요 | WinForm Program

 

2012-02-14 오후 12:13:51
꿈달 번호: 143277 추천:0 / 읽음:150

이상하네요

분명 틀린게없는데.... 왜저렇게 메서드 이름이 필요합니다라고 뜨는지

 

gongswat(int[] rnd_x,int[] rnd_y, Graphics g)

{

생략
}

 

이걸 스레드로 돌릴려고하는데 왜 자꾸 저런오류가 뜨는지 ㅠㅠ....

쫌알려주셧으면합니다..

[채택답변] Thread 함수를 넘겨주어야 합니다.
0
2012-02-14 오후 12:52:09
질문자 인사 : 감사합니다 이해하도록 노력하고 한번 써봐야겟어요!
정성태 (kevin25) 번호: 143278

ThreadStart 는 delegate 타입입니다. 따라서, 함수명을 넘겨주어야 하는데, 함수를 호출하듯이 구문을 넣어주었으니 그런 문제가 발생합니다.

 

따라서, 다음과 같이 바꿔야 합니다.

 

new ThreadStart(gongswat);

 

그런데, 틀린 것이 또 있군요. ThreadStart 의 signature는 void func() 라서, gongswat 함수를 다음과 같이 바꿔야 합니다.

 

void gongswat()

{
...

}

 

다시 문제로 돌아가서, 함수를 생성하는 시점에 rnd_x, rnd_y, g 파라미터를 전달해야 하는데, 이걸 어떻게 해야 할까요? 이를 위해 .NET 2.0 부터 ParameterizedThreadStart delegate 가 새롭게 추가된 것입니다. 따라서, 최종적으로 다음과 같이 구성해 주어야 합니다.

 

Thread t1 = new Thread(new ParameterizedThreadStart(gongwat));

MyParam param =new MyParam();

param.rnd_x = rnd_x;

param.rnd_y = rnd_y;

param.g = g;

t1.Start(param);

 

void gongswat(object state)

{

MyParam param = state as MyParam;

 

...

}

 

+ Recent posts