2017-04-09 12 views
0

ユーザーがそのフォルダのチェックボックスをオンにしている場合、別の場所にいくつかのフォルダをコピーするコードがあります。バックグラウンドワーカーのプログレスバー

私はバックグラウンドワーカーとプログレバーを持っています。私はこのサイト上でも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フォームを使用していますか? – Transcendent

+0

コピーするフォルダのリストを作成し、forループの各繰り返しで1つのフォルダのみをコピーする必要があります。コードの問題は、1回の繰り返しですべてのフォルダをコピーしようとしたことです。 – kennyzx

+0

@kennyzx私は非常にC#で新しく、コードとして学習しようとしています。コード例を教えていただけますか? – Besiktas

答えて

0

は、あなたがコピーされるフォルダのリストを構築する必要があり、forループの各反復で1つのフォルダのみをコピーします。

は、これは私がこれまで持っているものです。コードの問題は、1回の繰り返しですべてのフォルダをコピーしようとしたことです。

コードサンプルのアイデアを説明します。

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

En ...しかし、それは背景の仕事の元の質問とは無関係です。各質問/回答に具体的なコンテキストがあることを確認するために、新しい投稿を開始することをお勧めします。 – kennyzx

関連する問題