2011-01-05 2 views
1

BG 작업자를 사용하여 진행률 막대를 증가 시키려고합니다. 현재 2 명의 BG 직원을 사용 중입니다. 하나는 DB에 데이터를 추가하고 다른 하나는 진행률 표시 줄에 추가하는 것입니다. DB 업로드가 정상적으로 진행되었지만 진행률 막대가 올바르지 않습니다.C# winform 백그라운드 작업자 및 진행률 막대

코드 :

BackgroundWorker bg2 = new BackgroundWorker(); 
bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork); 
bg2.RunWorkerAsync(); 

void bg2_DoWork(object sender, DoWorkEventArgs e) 
    { 

     while (bg1.IsBusy) 
      DrawWellPlate.pbar.Increment(1) 
    } 

BG1가 참조하는 데이터베이스 업로드 스레드 및 pbar 명확하게 진행 표시 줄입니다.

감사합니다. 당신은 totalProgress가 진행 막대에 표시됩니다이 같은 것을해야

+0

:

당신은 하나 명의 배경 노동자와이 (의사 코드) 등의 작업 방법을 뭔가를 사용해야합니까? 아니면 UI가 얼어 버렸습니까? –

+0

예외는 아니며, 술집에서 진도가 없다. –

답변

4

이 doWork는 UI 스레드가 아닌 실행, 즉

BackgroundWorker bg2 = new BackgroundWorker(); 
bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork); 
.ProgressChanged += new ProgressChangedEventHandler(bg2_ProgressChanged) 
bg2.RunWorkerAsync(); 

void bg2_DoWork(object sender, DoWorkEventArgs e) 
    { 

     while (bg1.IsBusy) 
      worker.ReportProgress(totalProgress); 
    } 
private void bg2_ProgressChanged(object sender, 
      ProgressChangedEventArgs e) 
     { 
      DrawWellPlate.pbar.Value = e.ProgressPercentage; 
     } 

은 자세한 내용

+0

감사. 나는 이것을 줄 것이다. –

+0

희망이 도움이 되길 바랍니다. –

2

에 대한 this을 볼 수있는 BackgroundWorker의 목적이다 문제는 bg1이 일 것입니다. 항상은 DoWork 메소드를 실행하는 동안 사용 중이라고보고합니다. 당신이 어떤 예외가나요

void bg1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    while(got_stuff_to_add_to_the_database) 
    { 
     //do *some* of the work 
     AddABit() 

     //Update the progress - 5% at a time? 
     totalProgress += 5 

     //update the progress bar 
     ReportProgress(totalProgress) 

     if(finished) 
     { 
      got_stuff_to_add_to_the_database = false; 
     } 
    } 
}