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= { 1, 2, 3, 4, 5 }; 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) // // ... 생략 ... // } } |
상단에 ThreadParam 구조체와 메소드를 선언했다.
그리고 Function1에서 ThreadParam 변수인 tp를 생성하고 스레드도(ThreadForWork) 생성한다.
그 후 ThreadParam의 메소드인 ThreadFunction를 호출하고 그 리턴 값으로 ThreadParam 값을 받아온다.
그동안 메인 스레드는 while문에서 ThreadForWork 스레드가 작업을 마치기를 기다리면서 일을 처리하다가
리턴 값이 오면 while문을 벗어난다.
리턴 값으로 받은 ThreadParam의 값을 사용할 수 있다.
혹시 이해가 안 되시면 댓글 남겨주세요.
감사합니다.
'개발 > C#' 카테고리의 다른 글
C#, 스레드 간단히 사용하기 (0) | 2017.02.24 |
---|