如果用户选中了该文件夹的复选框,我会将下面的代码复制到其他位置。
我有一个背景工作者和一个progresbar。我看到本网站上甚至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
}
}
答案 0 :(得分:0)
您需要构建要复制的文件夹列表,并在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);
}
}