В настоящее время я пытаюсь добавить в свое приложение параллельные загрузки, но я не знаю, как обрабатывать событие 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");
}
}
(Я также не могу загрузить более двух файлов одновременно - третья загрузка не начнется, пока не закончатся первые два)
DownloadProgressChangedEvent:
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, но я не уверен, как создать несколько таких событий, не зная нужного числа ...
Так что я надеюсь, что кто-нибудь сможет мне в этом помочь,
заранее спасибо!