for循环中的进度条

时间:2017-01-24 19:12:03

标签: c# winforms

我对进度条和循环有几个问题。 我承认我对这一切都很陌生,所以我希望我的问题有道理。

我正在使用Microsoft Visual C#2010 Express WMA。

我使用以下代码填充进度条。

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

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

}));
backgroundThread0.Start();

我需要填写许多进度条。它们被标记为vProgressBar0,vProgressBar1,vProgressBar2等。这段代码可以满足我的需求,但它非常重复 填写所有进度条。

我想使用" For"循环使用值" i"作为我填充进度条的计数器。

我能够取代" vProgressBar0.BeginInvoke"使用this.Controls[vProgressBar + i].BeginInvoke()的声明,它可以正常工作。

我的问题是:我找不到用任何会使用" i"来替换vProgressBar0.Value = ((vTotal* 100) / vGames)语句的方法。我的for循环中的值。有什么想法吗?

我是否可以将backgroundThread0用于for循环中的所有进度条,或者我是否还需要递增该值? (例如backgroundThread0,backgroundThread1等)因为我也无法使该值增加。

1 个答案:

答案 0 :(得分:0)

这是非常基本的,只需将ProgressBar个实例放在一个数组中并迭代它们。由于这是如此简单,我建议不要使用new ThreadStart,因为您需要更好地理解一般编程实践。

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