2017-04-14 4 views
0

저는 혼란 스럽습니다 : 배경 작업자의 모든 데모에서. 그들은이 방법에 Thread.Sleep();을 넣어서 긴 작동 시간을 시뮬레이션합니다. 그러나 데이터베이스에서 데이터 테이블로 데이터를 임포트하는 작업이 있고 importData() 메서드를 호출했습니다. 나는 Thread.Sleep();을 대신 사용합니다. 그것은 100 시간 동안 수입 될 것이라는 의미입니까? 귀하의 답변에 감사드립니다.배경 작업자의 Dowork()은 정확히 무엇입니까?

void worker_DoWork(object sender, DoWorkEventArgs e) 
      { 
        for(int i = 0; i < 100; i++) 
        { 
          (sender as BackgroundWorker).ReportProgress(i); 
          Thread.Sleep(100); 
        } 
      } 

답변

0

DoWork은 배경 작업자의 주요 이벤트입니다. 그것은 백그라운드에서해야만하는 작업이 그 이벤트에서 수행된다는 것을 의미합니다. 당신이 for-loopImportData() 방법이 넣으면

은 다음 네 데이터는 100 번 importet 것, 또는 어떤 변수 당신은 100

대신 추가 그러나 당신은 당신의 작업을 수행 할 필요가 없습니다 for-loop, 그냥 for-loop 부분을 건너 뛰고 ImportData() 부분을 MSDN에서

소견을 수행

당신이 RunWorkerAsync 메서드를 호출 할 때이 이벤트가 발생합니다. 이 잠재적으로 수행하는 작업을 시작합니다 시간이 오래 걸리는 작업.

DoWork 이벤트 처리기의 코드는 인 경우 주기적으로 CancellationPending 속성 값을 확인하고 작업을 중단해야합니다. 이 경우 System.ComponentModel.DoWorkEventArgs의 취소 플래그를 true로 설정하면 RunWorkerCompleted 이벤트 처리기의 System.ComponentModel.RunWorkerCompletedEventArgs의 취소 된 플래그 이 true로 설정됩니다.

+0

루프에 넣지 않으면. 백분율이 백작없이 계산되는 방법 (BackgroundWorker로 보낸 사람) .ReportProgress (i)? 나에게 설명해 줘, 나는 처음으로 그것을 직면했다. –

+0

@ PhanThếKhương 자아를 제공해야하는 비율. 12 개의 시간이 소요되는 작업을 수행 중이라고 가정하고 각 작업 후에 100/12를 제공해야합니다. 하나의 작업 만하는 경우 비율로는 의미가 없습니다. –

+0

확인. 지금 나는 완전히 그것을 얻었다 :) 당신을 대단히 감사하십시오. –