【问题标题】:Background worker progress percentage后台工作人员进度百分比
【发布时间】:2019-02-11 10:36:31
【问题描述】:

我正在将字符串值从 List 添加到列表框。 我想在 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;
}

【问题讨论】:

  • Systems.Collections.Generics.List
  • 假设我有 100 件商品。我目前在第 7 项。我取得了哪些进展?您如何将其应用到您的代码中?
  • @PoojaJamdade "ReportProgress(0, item);"似乎您不了解这些参数的用途。如果您有 x 个项目并且您通过它们计算出一个百分比,那么它的简单数学运算。
  • 参数是int percentProgress和object userState。我想计算进度百分比
  • @pooh 乘以 100 之前除法。

标签: c# winforms progress-bar backgroundworker


【解决方案1】:

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);    
     }

【讨论】:

  • 不客气!一般来说,只有当迭代元素在集合中的位置不重要时才使用 foreach。
  • 是的!再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2012-06-11
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2013-02-27
相关资源
最近更新 更多