2017-01-24 5 views
-1

Ich habe ein paar Fragen über Fortschrittsbalken und for-Schleifen. Ich gebe zu, ich bin ziemlich neu in all dem, also hoffe ich, dass meine Frage einen Sinn ergibt.Fortschrittsbalken in for-Schleifen

Ich verwende Microsoft Visual C# 2010 Express WMA.

Ich verwende den folgenden Code, um meine Fortschrittsbalken zu füllen.

new ThreadStart(() => 
{ 
    Thread.Sleep(0); 

    vProgressBar0.BeginInvoke(
     new Action(() => 
      { 
       vProgressBar0.Value = ((vTotal* 100)/vGames); 
      })); 

})); 
backgroundThread0.Start(); 

Ich habe eine Reihe von Fortschrittsbalken, die ich füllen muss. Sie sind mit vProgressBar0, vProgressBar1, vProgressBar2 usw. gekennzeichnet. Dieser Code tut, was ich brauche, aber es ist ziemlich repetitiv , um alle Fortschrittsbalken zu füllen.

Ich möchte eine "For" -Schleife mit dem Wert "i" als meinen Zähler verwenden, um die Fortschrittsbalken zu füllen.

Ich kann die "vProgressBar0.BeginInvoke" Anweisung mit this.Controls[vProgressBar + i].BeginInvoke() ersetzen und es funktioniert gut.

Meine Frage ist: Ich kann keinen Weg finden, um die vProgressBar0.Value = ((vTotal* 100)/vGames) Aussage durch irgendetwas zu ersetzen, das den "i" Wert in meiner for Schleife benutzt. Irgendwelche Gedanken?

Kann ich den backgroundThread0 für alle Fortschrittsbalken in der for-Schleife verwenden oder muss ich diesen Wert auch erhöhen? (z. B. backgroundThread0, backgroundThread1 usw.) Da ich auch Probleme habe, diesen Wert zu erhöhen.

+2

OMG, das ist Code erschreckende ... Es gibt so viele Dinge falsch mit diesem. Du machst einen 'Thread', wirklich? Wenn Sie die Steuerelemente für den Fortschrittsbalken iterieren möchten, fügen Sie sie in ein Array ein. –

+0

Ich denke, Sie könnten eine Art von Array oder eine Liste aller Objekte erstellen und dann diese Liste durchlaufen. – Danieboy

Antwort

0

Dies ist sehr einfach, setzen Sie einfach die ProgressBar Instanzen in ein Array und iterieren über sie. Da dies so einfach ist, würde ich davon abraten, new ThreadStart zu verwenden, da Sie die allgemeinen Programmierpraktiken besser verstehen müssen.

private readonly ProgressBar[] _bars = 
    new[] 
    { 
     vProgressBar0, vProgressBar1, vProgressBar2, vProgressBar3 
    }; 

public void StartProgress() 
{ 
    for (int i = 0; i < _bars.Length; ++ i) 
    { 
     var progressBar = _bars[i]; // If "i == 0" this is the "vProgressBar0" instance. 
     // Use it here... 
    } 
}