2011-01-05 14 views
1

BGワーカーを使用してプログレスバーを増加させようとしています。 私は現在、2つのBG作業者を使用しています.1つはDBにデータを追加し、もう1つは進行状況バーに追加します。 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は明らかにプログレスバーです。

ありがとうございました。

+0

あなたはどの例外を取得しましたか?またはあなたのUIはフリーズされましたか? –

+0

例外はありませんが、バーの進行状況はありません。 –

答えて

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

の目的で詳細

+0

ありがとうございます。私はこれを行かせます。 –

+0

これが役立つことを願って –

2

ためthisを参照してください問題は、bg1はです。常にはDoWorkメソッドの実行中にビジー状態であると報告します。

あなただけONE背景労働者を使用し、その行う作業方法でなければならない。このような何か(擬似コード):

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; 
     } 
    } 
} 
関連する問題