2017-04-09 7 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

당신은 복사 할 폴더의 목록을 구성해야하고, 루프의 각 반복에 하나 개의 폴더를 복사 :

이것은 내가 지금까지있는 것입니다. 코드의 문제는 한 번의 반복으로 모든 폴더를 복사하려고했다는 것입니다.

코드 샘플의 아이디어를 설명합니다.

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