【发布时间】:2015-02-25 02:57:25
【问题描述】:
我有多个 BackgroundWorker 组件正在下载数据,它们会根据进度更新相应的 ListViewItem。下载过程开始时,ListView 控件会剧烈闪烁。
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 设置为 true,但没有奏效。
【问题讨论】: