C# 后台工作人员进度百分比

C# 后台工作人员进度百分比,c#,winforms,progress-bar,backgroundworker,C#,Winforms,Progress Bar,Backgroundworker,我正在从列表向列表框添加字符串值。 我想在ReportProgress方法中计算进度百分比。请帮助我计算进度百分比。我在ReportProgress方法的第一个参数中写入了0。我想用进度百分比替换该0 这是我的密码 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { List<string> result = new List<string>(); var

我正在从列表向列表框添加字符串值。 我想在ReportProgress方法中计算进度百分比。请帮助我计算进度百分比。我在ReportProgress方法的第一个参数中写入了0。我想用进度百分比替换该0

这是我的密码

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
     List<string> result = new List<string>();
     var found = obj.getFiles();

     foreach (var item in found)
     {
         if (item.Contains("SFTP:") || item.Contains("ERROR:"))
         {
             result.Add(item);

             (sender as BackgroundWorker).ReportProgress(0, item);
         }
         else
             (sender as BackgroundWorker).ReportProgress(0);
         System.Threading.Thread.Sleep(1000);

     }
     e.Result = result;
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    if (e.UserState != null)
        listBox1.Items.Add(e.UserState);

    progressBar2.Value = e.ProgressPercentage;
}
private void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
列表结果=新列表();
var found=obj.getFiles();
foreach(找到的变量项)
{
if(item.Contains(“SFTP:)| | item.Contains(“错误:))
{
结果.添加(项目);
(发件人作为后台工作人员)。报告进度(0,项);
}
其他的
(发件人作为后台工作人员)。报告进度(0);
系统线程线程睡眠(1000);
}
e、 结果=结果;
}
私有void backgroundWorker1\u ProgressChanged(对象发送方,ProgressChangedEventArgs e)
{
如果(例如UserState!=null)
listBox1.Items.Add(如UserState);
progressBar2.值=e.ProgressPercentage;
}

Foreach不一定是此应用程序的最佳迭代。使用for循环并使用索引根据找到的文件的大小计算进度

     for (int i = 0; i < found.Count; i++)
     {
         int progress = (int)(((float)(i + 1) / found.Count) * 100);
         if (found[i].Contains("SFTP:") || found[i].Contains("ERROR:"))
         {
             result.Add(found[i]);

             (sender as BackgroundWorker).ReportProgress(progress, found[i]);
         }
         else
             (sender as BackgroundWorker).ReportProgress(progress);
         System.Threading.Thread.Sleep(1000);    
     }
for(int i=0;i
Systems.Collections.Generics.ListLet让我们假设我有100项。我现在是第7项。我取得了什么进展?如何将其应用于代码?@PoojaJamdade“ReportProgress(0,item);”似乎您不了解这些参数的用途。。如果你有x个项目,并且你通过n个项目计算出一个百分比,那么这就是简单的数学。参数是int percentProgress和objectuserstate。我要计算进度percentage@pooh除法前乘以100,不用谢!通常,仅当迭代元素在集合中的位置不受关注时才使用foreach。是!再次感谢你!