C\#에서 backgroundWorker 류 의 용법 에 대한 상세 한 설명

1.WinForms 에서 시간 이 걸 리 는 작업 을 수행 해 야 합 니 다.이 작업 이 완료 되 기 전에 사용자 인터페이스 를 조작 하면 사용자 인터페이스 가 응답 을 중단 할 수 있 습 니 다.해결 방법 은 새로 스 레 드 를 열 어 시간 이 걸 리 는 작업 을 스 레 드 에 넣 고 실행 하면 사용자 인터페이스 에서 다른 작업 을 할 수 있 습 니 다.새 스 레 드 는 Thread 클래스 를 사용 하여 다 중 스 레 드 를 동시에 조작 할 수 있 습 니 다.간단 한 방법 은 BackgroundWorker 클래스 를 통 해 이 루어 집 니 다.
BackgroundWorker 는 UI 인터페이스 를 업데이트 하 는 데 사용 할 수 있 지만,보통 Progressbar(진도 바)컨트롤 에 사 용 됩 니 다.
UI 업데이트

private void Form1_Load(object sender, EventArgs e)
{
   this.backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    this.textBox1.Text = "UI";
}
BackgroundWorker 클래스 로 시간 이 걸 리 는 동작 을 수행 합 니 다.
BackgroundWorker 클래스 는 System.Component Model 네 임 스페이스 에 있 습 니 다.
VS 공구 상자 에 BackgroundWorker 구성 요소 가 있 습 니 다.바로 이 종류 입 니 다.
backgroundwork 의 주요 이벤트 및 매개 변수:
1.DoWork―BackgroundWorker.RunWorkerAsync 방법 을 실행 할 때 이 사건 을 촉발 하고 DoWorkEventArgs 인 자 를 전달 합 니 다.
2.RunWorkerComplete―비동기 작업 이 완료 되 거나 중간 에 종료 되면 이 사건 이 발생 합 니 다.
3.ProgressChanged―작업 처리 에서 얻 은 처리 상태 변 화 는 BackgroundWorker.Report Progress(int)방법 으로 이 사건 을 촉발 하고 ProgressChanged EventArgs 를 전달 합 니 다.이 매개 변 수 는 UI 인터페이스 에 progressbar 컨트롤 을 설정 합 니 다.
backgroundwork 의 주요 방법:
1. BackgroundWorker.RunWorkerAsync―'시동'비동기 호출 방법 은 RunWorkerAsync(),RunWorkerAsync(object argument)를 두 번 다시 불 러 옵 니 다.두 번 째 재 부팅 은 비동기 호출 에 사용 할 수 있 는 인 자 를 제공 합 니 다.(만약 여러 개의 매개 변 수 를 전달 하려 면 어떻게 해 야 합 니까?하나의 종 류 를 사용 하여 그들 을 전달 하 세 요)이 방법 을 사용 하면 DoWork 이벤트 가 발생 합 니 다.또한 DoWork 사건 을 처리 하 는 함수 에 DoWorkEventArg 인 자 를 전달 하기 위해 RunWorkerAsync 가 전달 하 는 인 자 를 포함 합 니 다.해당 DoWork 의 처리 함수 에서 구체 적 으로 복잡 한 조작 을 할 수 있 습 니 다.
 2.BackgroundWorker.ReportProgress―지루 한 작업 에서 사용자 에 게 진 도 를 계속 피드백 해 야 합 니 다.그러면 호출 할 수 있 는 ReportProgress(int percent)는 ReportProgress 방법 을 호출 할 때 ProgressChanged 이 벤트 를 촉발 합 니 다.0 에서 100 사이 의 정 수 를 제공 합 니 다.배경 활동 이 완 료 된 백분율 을 표시 합 니 다.이벤트 처리 프로그램 에 상태 정 보 를 전달 할 수 있 도록 모든 대상 을 두 번 째 매개 변수 로 제공 할 수 있 습 니 다.이 과정 을 전달 하 는 ProgressChanged EventArgs 매개 변수 속성 으로서 백분율 과 대상(제공 하면)은 ProgressChanged 이벤트 처리 프로그램 에 전 달 됩 니 다.이 속성 들 은 각각 Progress Percentage 와 UserState 로 명명 되 었 으 며,이벤트 처리 프로그램 은 필요 한 방식 으로 사용 할 수 있 습 니 다.(메모:BackgroundWorker.Worker Reports Progress 속성 이 true 로 설정 되 어야 만 사용 할 수 있 습 니 다.
 3. BackgroundWorker.Cancel Async-그러나 비동기 호출 을 종료 해 야 할 때 이 방법 을 사용 합 니 다.그러나 샘플 이 부족 합 니 다.BackgroudWorker.CancellationPending 속성 을 true 로 설정 하기 때 문 입 니 다.구체 적 인 비동기 호출 처리 가 필요 할 때 BackgroudWorker.CancellationPending 이 true 인지 계속 확인 하고 사실 이 라면 종료 하 십시오.(메모:BackgroundWorker.Worker Supports Cancellation 속성 이 true 로 설정 되 어야 만 사용 할 수 있 습 니 다.
백그라운드 Worker 구성 요소
중요 속성:
1.CancellationPending 에서 값 을 가 져 옵 니 다.프로그램 이 배경 작업 을 취소 할 지 여 부 를 표시 합 니 다.DoWork 이벤트 에서 CancellationPending 속성 을 판단 하면 배경 작업 을 취소 해 야 하 는 지 여 부 를 인정 할 수 있 습 니 다(즉,스 레 드 종료).
2.WorkerReports Progress:값 을 가 져 오 거나 설정 합 니 다.이 값 은 BackgroundWorker 가 진도 업 데 이 트 를 보고 할 수 있 는 지 를 표시 합 니 다.
중요 한 방법:
1.CancelAsync 가 걸 려 있 는 배경 작업 을 취소 해 달라 고 요청 합 니 다.
2,RunWorkerAsync 시작 배경 작업
3.보고 진행 진행 진행 진행 변경 사건 발생
중요 이벤트:
1.DoWork 가 RunWorkerAsync 를 호출 할 때 발생
2.ProgressChanged 에서 ReportProgress 호출 시 발생
3.RunWorkerComplete 배경 작업 이 완료 되 었 거나 취소 되 었 거나 이상 이 발생 했 을 때
또한 세 가지 중요 한 매개 변 수 는 RunWorkerComplete EventArgs 와 DoWorkEventArgs,ProgressChanged EventArgs 이다.
예:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Delegate3
{
  public partial class Form1 : Form
  {

    public Form1()
    {
      InitializeComponent();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
      //        
      //  RunWorkerAsync()  ,   DoWork  
      this.backgroundWorker2.RunWorkerAsync();
    }

    private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
    {
      backgroundWorker2.WorkerReportsProgress = true;
      for (int i = 1; i <= 100; i++)
      {
        //                  ,       。
        //      CancelAsync    CancellationPending   false
        if (backgroundWorker2.CancellationPending)
        {
          backgroundWorker2.ReportProgress(i, String.Format("{0}%,         ", i));
        }

        //   ReportProgress   ,   ProgressChanged  
        backgroundWorker2.ReportProgress(i, String.Format("{0}%", i));
        System.Threading.Thread.Sleep(10);
      }
    }

    private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
      this.progressBar1.Value = e.ProgressPercentage;
      this.label1.Text = e.UserState.ToString();
      this.label1.Update();
    }

    private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
      //         
      MessageBox.Show("  ");
    }
  }
}
C\#에서 backgroundWorker 류 의 용법 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 관련 C\#backgroundWorker 류 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기