2014-12-28 8 views
-1

데이터를 다운로드하는 데 여러 BackgroundWorker 구성 요소가 있고 각 ListViewItem을 진행 상황으로 업데이트합니다. 다운로드 프로세스가 시작되면 ListView 컨트롤이 크게 깜박입니다.ListViewItem의 텍스트를 업데이트 할 때 깜박임

private void btnDownload_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < videos.Count; i++) 
     { 
      var index = i; 
      BackgroundWorker worker = new BackgroundWorker 
      { 
       WorkerReportsProgress = true 
      }; 
      worker.DoWork += delegate 
      { 
       if (videos[index].RequiresDecryption) 
        DownloadUrlResolver.DecryptDownloadUrl(videos[index]); 
       AudioDownloader audioDownloader = new AudioDownloader(videos[index], Path.Combine(Settings.Default.DownloadLocation, 
        RemoveIllegalPathCharacters(videos[index].Title) + videos[index].AudioExtension)); 
       audioDownloader.AudioExtractionProgressChanged += (s, args) => 
        { 
         int num = (int)Math.Round((decimal)(85 + args.ProgressPercentage * 0.15)); 
         worker.ReportProgress(num); 
        }; 
       audioDownloader.DownloadProgressChanged += (s, args) => 
        { 
         int num = (int)Math.Round((decimal)(args.ProgressPercentage * 0.85)); 
         worker.ReportProgress(num); 
        }; 
       audioDownloader.Execute(); 
      }; 
      worker.ProgressChanged += (s, args) => 
       { 
        lstQueue.Items[index].SubItems[2].Text = args.ProgressPercentage.ToString(); 
       }; 
      worker.RunWorkerAsync(); 
     } 
    } 

어떻게 깜박임을 제거 할 수 있습니까? 부모 폼에 대해 DoubleBuffered 설정을 시도했지만 작동하지 않습니다.

답변

0

매우 간단했습니다. 내가해야 할 일은 ListView를 상속 받아 생성자에 SetStyle(ControlStyles.OptimizedDoubleBuffer, true);을 호출하는 사용자 지정 컨트롤을 만드는 것뿐이었습니다.