2016-09-14 5 views
-2

UIの進行状況バーがありますが、各機能の実行が終了するまで進捗状況を変更したいと思います。私はバックグラウンドワーカーで試してみました。私はbackgroundworker_dowork関数を使って実装しようとしています。どのように私は私の進行中の機能とそれを同期することができます。今すぐ仕事はちょうど最初の進歩を取る。どのように私は関数の実行ごとにそれを増やすことができます。c#バックグラウンドワーカーのプログレスバー

private void Ok_Button_Click(object sender, EventArgs e) 
    { 
        //set max sixe of progress bar 
     elementForm.progressBar1.Maximum = 100; 
     //// To report progress from the background worker we need to set this property 
     elementForm.backgroundWorker1.WorkerReportsProgress = true; 
     //// This event will be raised on the worker thread when the worker starts 
     elementForm.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); 

     //// This event will be raised when we call ReportProgress 
     elementForm.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); 
     elementForm.backgroundWorker1.RunWorkerAsync(); 
method1(); 
progress=10; 
method2(); 
progress=20 
method3(); 
lastmethod(); 
progress=100; 

} 

基本的に進捗状況は、メソッドの実行に伴って増加する必要があります

私のコードは次のようなものです。すべての方法は進行を増やすべきことをしており、進行と呼ばれる最後の方法が100%になるはずです。 backgroundWorker1_DoWorkため

コード(私はメソッドの完了と進行増分を同期するには、ここで何をすべきか)backgroundWorker1_ProgressChangedため

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 

     if (elementForm.progressBar1.Value < elementForm.progressBar1.Maximum) 
     { 
      while(progress!=100) 
      { 

       elementForm.progressBar1.Increment(progress); 

       elementForm.progressBar1.CreateGraphics().DrawString(progress.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(elementForm.progressBar1.Width/2 - 10, elementForm.progressBar1.Height/2 - 7)); 


      } 
     } 
    } 

コード:すべてのコメントについて

 private void backgroundWorker1_ProgressChanged(object sender, 
      ProgressChangedEventArgs e) 
    { 
     if (elementForm.InvokeRequired) 
     { 
      elementForm.Invoke(new Action<object, ProgressChangedEventArgs>(backgroundWorker1_ProgressChanged), sender, e); 

      return; 
     } 

     // The progress percentage is a property of e 
     elementForm.progressBar1.Value = e.ProgressPercentage; 

    } 
+0

あなたのしたことを示すコードを挿入してください。 – active92

+0

あなたのコードを教えてください! – Enigmativity

+0

右の関連する列を見てください。このサイトには数十もの同様の質問があります。何があなたの質問を変えるのですか? –

答えて

-1

感謝。

私はDo_workに自分の機能を配置し、進行状況バーはDo_work内の関数呼び出しと同期して監視し、実行します。

関連する問題