2016-09-14 6 views
-2

UI에 진행률 표시 줄이 있습니다. 끝날 때까지 각 기능의 실행과 함께 진행 상황을 변경하고 싶습니다. 나는 배경 작업자와 노력했다. backgroundworker_dowork 함수를 사용하여 구현하려고합니다. 진행중인 기능과 어떻게 동기화 할 수 있습니까? 지금 당장은 초기 진보가 필요합니다. 함수를 실행할 때마다 어떻게 증가시킬 수 있습니까?# backgroundworker가있는 진행 표시 줄

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 내부의 함수 호출과 동기화되어 모니터하고 실행합니다.