【问题标题】:Progressbar with backgroundworker带有后台工作者的进度条
【发布时间】:2017-09-04 11:53:12
【问题描述】:

如果用户选中了该文件夹的复选框,我有下面的代码可以将一些文件夹复制到不同的位置。

我有一个后台工作人员和一个进度条。我看到这个网站甚至 MSDN 上的人都给出了同样的例子来更新进度条

for (int i = 0; i <= 100; i++)
{
    // Report progress to 'UI' thread
    backgroundWorker1.ReportProgress(i);
    // Simulate long task
    System.Threading.Thread.Sleep(100);
}

这一切都很好,我知道它是如何工作的。但是我想不通的是实现我的复选框并在选中时复制文件夹,然后根据我拥有的复选框更新进度条。我计算了复选框并将其分配给 prgbarmax。

这是我目前所拥有的:

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{           
   for (int i = 0; i < prgbarmax; i++)
    {
        int step = (i / prgbarmax) * 100;
        if (test1)
        {
            //do the copy here
            backgroundWorker1.ReportProgress(i);                    
        }

        if (tes2)
        {
            //do the copy here
            backgroundWorker1.ReportProgress(i);
        }

        if (test3)
        {
            //do the copy here                  
            backgroundWorker1.ReportProgress(i);
        }
        .... so on
    }
}

【问题讨论】:

  • 您使用的是 WPF 还是 Windows 窗体?
  • 您需要构造一个要复制的文件夹列表,并且在for循环的每次迭代中只复制一个文件夹。您的代码的问题是您试图在一次迭代中复制所有文件夹。
  • @kennyzx 我对 C# 非常陌生,并尝试在编写代码时学习。你能给我一个代码示例吗?
  • @Transcendent 抱歉.. 我现在添加到问题中。我正在使用 Win Forms

标签: c# winforms progress-bar backgroundworker


【解决方案1】:

您需要构建一个要复制的文件夹列表,并且在 for 循环的每次迭代中只复制一个文件夹。您的代码的问题是您试图在一次迭代中复制所有文件夹。

在代码示例中说明这个想法。

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    //construct the list of folder to be copied
    List<DirectoryInfo> listOfFolders = new List<DirectoryInfo>();
    if (test1) 
       listOfFolders.Add(folder1);
    if (test2)
       listOfFolders.Add(folder2);
    if (test3)
       listOfFolders.Add(folder3);

    //begin to copy
    for (int i = 0; i < listOfFolders.Count; i++)
    {
        listOfFolders[i].Copy(...); //copy only one folder in the list
        int step = ((i + 1) / listOfFolders.Count) * 100; //calculate the progress
        backgroundWorker1.ReportProgress(step);
    }
}

【讨论】:

  • 感谢您的代码。但是每个文件夹都被复制到不同的文件夹中。如何比较名称并根据文件夹进行复制?
  • En... 但这与后台工作人员的原始问题无关。为了确保每个问题/答案都有具体的上下文,我建议你开始一个新的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2011-05-18
  • 2018-02-20
  • 1970-01-01
相关资源
最近更新 更多