2016-06-04 4 views
0

ich versuche, den Code hierkann nicht progressbar Animation mit Code erhalten, Progress genannt nicht

http://www.dotnetperls.com/progressbar

Hier ist der Code, den ich zu tun habe. Ich habe einen Hintergrundarbeiter gezeichnet und programmatisch einen Fortschrittsbalken hinzugefügt.

Ich habe versucht, über den Code zu gehen, und ich habe versucht, MessageBoxes zu sehen, was vor sich geht, und es sieht aus wie es nur eine Iteration der for-Schleife ausführt, die für wenn i = 0 ist und es scheint, dass es von diesem bis zum fertigen Verfahren geht, und das Progress-Verfahren wird nie aufgerufen.

Und der Fortschrittsbalken ändert sich nie Wert von 0.

Wenn ich es haben wollen, um die Fortschritte 100.

Ich habe versucht diese Linie //Application.EnableVisualStyles(); in Program.cs zu kommentieren, um eine natürliche Animation zu entfernen, die das progers Bar hat, aber egal, kommentiert oder unkommentiert, jt läuft nicht jede Iteration der for-Schleife, es beendet nach i = 0 .. Und es gibt keinen Fortschritt mit dem Hintergrundarbeiter oder der Fortschrittsbalken.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Threading; 

namespace backgroundworker2 
{ 
    public partial class Form1 : Form 
    { 
     ProgressBar progressBar1 = new ProgressBar(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
//   progressBar1.BackColor = Color.Red; 
      this.Controls.Add(progressBar1);   

      //progressBar1.Value = 100; 
       backgroundWorker1.RunWorkerAsync(); 



     } 

     private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
     { 

      // textBox1.Text = "0"; 
      for (int i = 0; i < 100; i++) 
      { 
      //  MessageBox.Show("a"+i); 
       Thread.Sleep(1000); 
       backgroundWorker1.ReportProgress(i); 
      } 


     } 

     private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
      MessageBox.Show("done"); 
     } 

     private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      // textBox1.Text = Convert.ToString(e.ProgressPercentage); 
      progressBar1.Value = e.ProgressPercentage; 
      // MessageBox.Show("asdf"); 
     } 
    } 

} 
+0

ich würde nur beachten Sie gut ich haben <= 100 und Thread.sleep (20); sind bessere Parameter. – barlop

Antwort

1

In Form1_Load laufen Sie die BackgroundWorker aber Sie haben nicht festgelegt, es ist WorkerReportsProgress Eigenschaft true. Der Standardwert ist false. So müssen Sie diese Zeile hinzufügen, bevor Sie die RunWorkerAsync() Methode aufrufen:

backgroundWorker1.WorkerReportsProgress = true;