我目前正在尝试向我的应用程序添加并行下载,但我不知道如何处理 DownloadProgressChangedEvent 以在多个进度条中显示进度。
我正在为用户能够下载的每个文件使用带有预定义行的 datagridview,并且每一行都有一个带有进度条的单元格。
现在的问题是,我不知道如何单独更新每个进度条,因为现在,所有选定的进度条都显示相同的百分比,它们只是在下载 1 和下载 2 的进度之间跳跃。
这是我使用的代码:
要开始下载:
private void download_button_Click(object sender, EventArgs e)
{
start = DateTime.Now;
download_button.Enabled = false;
Rows = dataGridView1.Rows.Count;
Checked = 0;
CheckedCount = 0;
//count the selected rows
for (i = 0; i < Rows; i++)
{
Checked = Convert.ToInt32(dataGridView1.Rows[i].Cells["checkboxcol"].FormattedValue);
CheckedCount += Checked;
richTextBox3.Text = CheckedCount.ToString();
}
for (int z = 1; z < CheckedCount; z++)
{
_MultipleWebClients = new WebClient();
_MultipleWebClients.DownloadFileCompleted += new AsyncCompletedEventHandler(_DownloadFileCompleted);
_MultipleWebClients.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(_DownloadProgressChanged);
_MultipleWebClients.DownloadFileAsync(new Uri(_downloadUrlList[z].ToString()), @"F:\test" + z + ".mp4");
}
}
(我也无法同时下载两个以上的文件 - 第三次下载要等前两个完成后才开始)
下载进度更改事件:
private void _DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
for (int c = 0; c < CheckedCount; c++)
{
dataGridView1.Rows[_downloadRowNrList[c]].Cells[3].Value = e.ProgressPercentage;
}
float size = ((e.TotalBytesToReceive / 1024) / 1024);
label1.Text = size.ToString();
double dn = (double)e.BytesReceived / 1024.0 / (DateTime.Now - start).TotalSeconds;
label2.Text = (dn.ToString("n") + " KB/s) " + e.ProgressPercentage);
}
问题可能是,所有进度条都使用相同的 DownloadProgressChangedEvent,但我不确定如何在不知道所需数量的情况下创建多个这些事件......
所以我希望有人能够帮助我解决这个问题,
提前致谢!