본문 바로가기

C# 문법

[C#] BackgroundWorker

BackgroundWorker

특징

  1. BackgroundWorker클래스는 별도의 스레드에게 어떤 일을 시키기 위해 사용하는 클래스이다.
  2. Thread이지만, 별도의 작업없이도 UI를 제어할 수 있다.

    이벤트

  3. DoWork이벤트 핸들러를 통해 실제 작업할 내용을 지정
  4. ProgressChanged이벤트를 통해 진척 사항을 전달
  5. 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();
    }

결과

image

참고 사이트

예제로 배우는 C# 프로그래밍