티스토리 뷰



사실 제목은 어렵지만 내용은 아주 간단합니다.

작업을 진행해야 하는데, 그 작업이 시간이 다소 걸려서

사용자에게 편의를 위한 ProgressBar를 보여 주기 위한 소스 입니다.

우선 Form1 과 Form2 가 존재 하고,



Form1 에서는 Thread 생성 및 상태를 검사하고

Form2 에서는 필요 Work 및 ProgressBar를 처리합니다.

우선 Form1 소스를 보면



InitializeComponent() 를 제외한 소스 입니다.

버튼 클릭 시 Thread를 생성( DoWork ), Start, Join( Block 상태 ) 을 하게 됩니다.

Block 이란 Form1의 상태인데, Thread.Join() 은 Thread 가 완료 할 때 까지, 해당 기점에서 멈추게 됩니다.

당연히 Thread 가 DoWork() 를 완료하게 되면, 다음 코드를 진행하게 됩니다.



DoWork 상에서 Form2 를 불러오고 Form2 에는 Change_Progress( int nValue )를 통해서

ProgressBar 막대기를 움직입니다.

Thread.Sleep(1) 을 준 이유는, 1이 없으면 움직이는게 보이지 않고 폼이 죽는 현상을 확인하고 넣었습니다.

DT 는 class 내에 포함되어 있는 DataTable 이고 그 수치만큼 움직이게 됩니다.



주요 순서를 정리하면

Form1 : Thread 생성 및 Work 부여 및 Start - Join 대기

Thread_1 : 작업 시작 및 Form2 생성 및 Form2 Progress Bar 이동

Thread_1 : 작업 완료시 DataTable에 채우기

Form1 : Thread.Join 상태 완료 및 dataGridView1.DataSource = DT 로 값 채우기

이상입니다.

참고 : msdn - http://msdn.microsoft.com/ko-kr/library/7a2f3ay4(v=vs.90).aspx
댓글
댓글쓰기 폼