728x90

안녕하세요. 공유민입니다.


이번 포스팅은 스레드 메소드로부터 리턴 값을 받아오는 방법에 대해 포스팅하겠습니다.


스레드에게 일을 시켜 놓고, 그 결과를 리턴 값을 받아야할 때가 있습니다.


저는 작업의 결과로 여러 값을 저장하고 싶어서 구조체를 사용했습니다.


그럼 샘플 코드로 설명하겠습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// 다른 using 생략
using System.Threading;
using System.Threading.Tasks;
 
 
namespace Gongyumin
{
    public partial class frmMain : Form
    {
        // 스레드 이용하기 위한 구조체
        public struct ThreadParam        
        {
            public String threadStr;
            public int threadInt;
            public int[] threadIntArr;            
            // 스레드가 호출할 메소드
            public ThreadParam ThreadFunction(ThreadParam ParamVal)
            {
                // ... 작업 ...//
                // 작업한 결과 저장하기
                ParamVal.threadStr = "abc";
                ParamVal.threadInt = 1234;
                ParamVal.threadIntArr= { 12345 };          
                return ParamVal;
            }
        }
 
            
        public frmMain()
        {
            InitializeComponent();
            // Function1을 호출한다.
            Function1();
        }
        
        
        public void Function1()
        {
            // 스레드에서 사용할 파라미터 설정            
            ThreadParam tp = new ThreadParam();            
            
            // 스레드 메소드를 호출한다. // 스레드가 처리 후 tp로 값을 리턴
            Thread ThreadForWork = new Thread(delegate () { tp = tp.ThreadFunction(tp); });     
            ThreadForWork.Start();
            
            while (tp.threadInt == 0)   // 스레드를 기다린다.
            {
                // ... 기다리면서 할 일 ... //
            }
 
            // 스레드로 부터 받아온 값은 사용한다 //
            // ex) MessageBox.show(tp.threadStr) //
 
            // ... 생략 ... //
        }
    }        

cs



상단에 ThreadParam 구조체와 메소드를 선언했다.

그리고 Function1에서 ThreadParam 변수인 tp를 생성하고 스레드도(ThreadForWork) 생성한다.

그 후 ThreadParam의 메소드인 ThreadFunction를 호출하고 그 리턴 값으로 ThreadParam 값을 받아온다.

그동안 메인 스레드는 while문에서 ThreadForWork 스레드가 작업을 마치기를 기다리면서 일을 처리하다가

리턴 값이 오면 while문을 벗어난다.

리턴 값으로 받은 ThreadParam의 값을 사용할 수 있다.

혹시 이해가 안 되시면 댓글 남겨주세요.

감사합니다.



'개발 > C#' 카테고리의 다른 글

C#, 스레드 간단히 사용하기  (0) 2017.02.24

+ Recent posts