C# 更新ListViewItems的文本时闪烁

C# 更新ListViewItems的文本时闪烁,c#,flicker,C#,Flicker,我有多个BackgroundWorker组件下载数据,它们会随着进度更新相应的ListViewItem。下载过程开始时,ListView控件剧烈闪烁 private void btnDownload_Click(object sender, EventArgs e) { for (int i = 0; i < videos.Count; i++) { var index = i; BackgroundW

我有多个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();
        }
    }
private void btnDownload\u单击(对象发送者,事件参数e)
{
对于(int i=0;i
{
int num=(int)数学四舍五入((十进制)(85+args.ProgressPercentage*0.15));
worker.ReportProgress(num);
};
audioDownloader.DownloadProgressChanged+=(s,args)=>
{
int num=(int)数学四舍五入((十进制)(args.ProgressPercentage*0.85));
worker.ReportProgress(num);
};
audioDownloader.Execute();
};
worker.ProgressChanged+=(s,args)=>
{
lstQueue.Items[index]。子项[2]。Text=args.ProgressPercentage.ToString();
};
worker.RunWorkerAsync();
}
}

如何消除闪烁?我曾尝试将父窗体的DoubleBuffered设置为true,但没有成功。

这非常简单。我所需要做的就是创建一个从ListView继承的自定义控件,并调用
SetStyle(ControlStyles.OptimizedDoubleBuffer,true)