【发布时间】:2016-11-06 15:22:43
【问题描述】:
目前我正在 C# 中创建一个视频下载器,因为我允许用户一次选择多个视频进行下载,并且选定的视频会转到列表视图控件。我想显示每次下载的进度。这是我开始下载的代码:
listView1.Invoke(new MethodInvoker(delegate ()
{
foreach (ListViewItem item in listView1.SelectedItems)
{
try
{
listViewItems = listView1.Items.Count;
string path = Properties.Settings.Default.outputFolder;
IEnumerable<VideoInfo> videos = DownloadUrlResolver.GetDownloadUrls(item.Text);
VideoInfo video = videos.First(p => p.VideoType == VideoType.Mp4);
if (video.RequiresDecryption)
DownloadUrlResolver.DecryptDownloadUrl(video);
title = video.Title;
foreach (char c in invalid)
{
title = title.Replace(c.ToString(), "");
}
VideoDownloader downloader = new VideoDownloader(video, Path.Combine(path + "\\", title + video.VideoExtension));
downloader.DownloadProgressChanged += Downloader_DownloadProgressChanged;
downloader.DownloadFinished += Downloader_DownloadFinished;
Thread thread = new Thread(() =>
{
downloader.Execute();
})
{ IsBackground = true };
thread.Start();
}
catch (Exception web)
{
DialogResult dlg = new DialogResult();
messageBox msb = new messageBox();
msb.labelText = "Video no longer available";
msb.btnText = "Ok";
dlg = msb.ShowDialog();
if(dlg == DialogResult.OK)
{
msb.Close();
}
}
}
这是进度变化事件:
private void Downloader_DownloadProgressChanged(object sender, ProgressEventArgs e)
{
flowLayoutPanel1.Invoke(new MethodInvoker(delegate
{
ProgressBar pb = new ProgressBar();
pb.Value = (int)e.ProgressPercentage;
flowLayoutPanel1.Controls.Add(pb);
}));
}
不是为每个项目创建进度条,而是创建很多进度条,这些进度条也没有显示任何进度。
我是 C# 新手,所以需要这方面的帮助。
【问题讨论】:
标签: c# foreach progress-bar progress