2011-01-05 35 views
1

我试图让进度条使用BG工作人员增加。 我目前使用2个BG工作人员,一个将数据添加到数据库中,另一个用于进度条。数据库上传工作正常,但进度条不是。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显然是进度条。

谢谢。

+0

你得到任何异常?或者只是你的UI被冻结了? – 2011-01-05 13:32:48

+0

没有例外,只是没有进展吧? – 2011-01-05 13:35:57

回答

4

你应该做这样的事情 其中totalProgress将在进度条显示的,的doWork在UI线程没有执行,这是BackgroundWorker的目的

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; 
     } 

看到this更多细节

+0

谢谢。我会放弃这一点。 – 2011-01-05 13:39:07

+0

希望这有助于 – 2011-01-05 13:41:39

2

的问题在于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; 
     } 
    } 
}