BackgroundWorker
특징
- BackgroundWorker클래스는 별도의 스레드에게 어떤 일을 시키기 위해 사용하는 클래스이다.
- Thread이지만, 별도의 작업없이도 UI를 제어할 수 있다.
이벤트
- DoWork이벤트 핸들러를 통해 실제 작업할 내용을 지정
- ProgressChanged이벤트를 통해 진척 사항을 전달
- RunWorkerCompleted 이벤트를 통해 완료 후 실행될 작업을 지정
Program 참고
- 버튼을 클릭하면 BackgroundWoker에서 1~100까지 값이 증가
- 값의 증가에 따라 ProgressBar의 상태 변화!
버튼과, Progressbar만 놓고 바로 Test 가능 합니다.
BackgroundWorker
private BackgroundWorker _woker;
public Form1()
{
InitializeComponent();
progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Step = 10;
progressBar1.Value = 0;
_woker = new BackgroundWorker();
//BackgroundWorker에게 진행률 보고
_woker.WorkerReportsProgress = true;
//비동기 취소 가능!
_woker.WorkerSupportsCancellation = true;
//BackgroundWorker가 실제 하는 일!
_woker.DoWork += new DoWorkEventHandler(woker_Dowork);
//진행률 보고!
_woker.ProgressChanged += new ProgressChangedEventHandler(woker_progressChanged);
//완료 후 실행될 작업을 지정
_woker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_Complete);
}
private void worker_Complete(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("완료");
}
private void woker_progressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
private void woker_Dowork(object sender, DoWorkEventArgs e)
{
for(int i = 0; i< 100; i++)
{
Thread.Sleep(50);
_woker.ReportProgress(i);
}
}
private void button1_Click(object sender, EventArgs e)
{
_woker.RunWorkerAsync();
}
결과
참고 사이트
예제로 배우는 C# 프로그래밍