C# 如何根据基于变量数组运行的foreach循环更新进度条?
例如: 在我的代码中,此时进度条为70: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
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。我想我在变量长度数组这个术语上遇到了麻烦。没有这回事。。数组是固定的。。