C# 如何根据基于变量数组运行的foreach循环更新进度条?

C# 如何根据基于变量数组运行的foreach循环更新进度条?,c#,foreach,progress-bar,C#,Foreach,Progress Bar,例如: 在我的代码中,此时进度条为70: pbUpload.Value = 70; foreach (string file in finalFiles) { //processes //processes } 最终文件具有可变长度。这意味着它没有固定的数字。因此,基本上我需要首先计算出数字,这很简单,但是我如何构建一个循环,在这个循环中,它将进度条从70更新到100(100是最后一个“每个”元素)?为此使用BackgroundWorker public partial cl

例如:

在我的代码中,此时进度条为70:

pbUpload.Value = 70;

foreach (string file in finalFiles)
{
    //processes
    //processes
}

最终文件具有可变长度。这意味着它没有固定的数字。因此,基本上我需要首先计算出数字,这很简单,但是我如何构建一个循环,在这个循环中,它将进度条从70更新到100(100是最后一个“每个”元素)?

为此使用
BackgroundWorker

public partial class Form1 : Form
{
   public Form1()
   {
       InitializeComponent();
       Shown += new EventHandler(Form1_Shown); 
       backgroundWorker1.WorkerReportsProgress = true;
       backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
       backgroundWorker1.ProgressChanged += 
       new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
       pbUpload.Value = 70;
   }

   void Form1_Shown(object sender, EventArgs e)
   {
       backgroundWorker1.RunWorkerAsync();
   }

   int val = 0;

   void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
   {
       val = (100 - pbUpload.Value) / finalFiles.Length;

       foreach (string file in finalFiles)
       {
           //Your processes
           backgroundWorker1.ReportProgress(pbUpload.Value + val);
       }
   }  

   void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
   {
        pbUpload.Value = e.ProgressPercentage;
   }
}
这更简单:

int count = finalFiles.Length;
int current = 0;
foreach (string file in finalFiles)
{
    current++;
    pbUpload.Value = current / count * 30 + 70;
}

祝你好运

从来没用过。你能给我举个例子吗?
finalFiles
变量有什么类型<代码>列表?请查看我的答案。如果我理解的没错,就是这样。如果
finalFiles
是一个
string[]
,如OP所示,使用
finalFiles.Length
不是更好吗?虽然差别很小,因为它是一个数组,但直接调用
Length
的复杂性仍然较小如果它是可变长度的,它就不是数组。还是我遗漏了什么?OP在评论中说这是一个数组。无论如何,我的帖子对任何IEnumerable都有效。但是是的,如果它是一个数组,肯定会调用Length。我想我在变量长度数组这个术语上遇到了麻烦。没有这回事。。数组是固定的。。