<meta name="GENERATOR" content="DEXTWebEditor" /><meta name="GENERATOR" content="DEXTWebEditor" />
데브피아에서 발췌한 내용입니다.^^
C# 스레드사용시 메서드이름이필요합니다?;오류가떠요 | WinForm Program
|
2012-02-14 오후 12:13:51 |
|
꿈달 |
번호: 143277 추천:0 / 읽음:150 |
![](http://pds.devpia.com/MAEUL/8/csharp_qa/144000/143277/제목%20없음.png)
이상하네요
분명 틀린게없는데.... 왜저렇게 메서드 이름이 필요합니다라고 뜨는지
gongswat(int[] rnd_x,int[] rnd_y, Graphics g)
{
생략 }
이걸 스레드로 돌릴려고하는데 왜 자꾸 저런오류가 뜨는지 ㅠㅠ....
쫌알려주셧으면합니다.. |
|
|
|
![](http://image.devpia.com/NewDevpia/maeul/qna/icon_BestAnswer.gif) |
[채택답변] Thread 함수를 넘겨주어야 합니다.
|
0
![](http://image.devpia.com/NewDevpia/maeul/qna/btn_BestAnswer.gif) |
2012-02-14 오후 12:52:09 | |
질문자 인사 : |
감사합니다 이해하도록 노력하고 한번 써봐야겟어요! | |
|
|
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;
...
}
| | |