2017-04-09 79 views
0

我有下面的代碼將一些文件夾複製到不同的位置,如果用戶有複選框選中該文件夾。背景工作進度條

我有一個backgroundworker和一個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

您使用的是WPF還是Windows Forms? – Transcendent

+0

您需要構建要複製的文件夾列表,並且在for循環的每次迭代中僅複製一個文件夾。你的代碼的問題是你試圖在一次迭代中複製所有的文件夾。 – kennyzx

+0

@kennyzx我對C#非常陌生,並且正在努力學習我的代碼。你能給我一個代碼示例嗎? – Besiktas

回答

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

感謝您的代碼。但是每個文件夾都被複制到不同的文件夾中。我如何比較名稱並根據哪個文件夾進行復制? – Besiktas

+0

恩...但這與背景工作者的原始問題無關。爲了確保每個問題/答案都有一個具體的背景,我建議你開始一個新的職位。 – kennyzx