現在、アプリケーションに並列ダウンロードを追加しようとしていますが、DownloadProgressChangedEvent を処理して複数の進行状況バーに進行状況を表示する方法がわかりません。
ユーザーがダウンロードできるファイルごとに事前定義された行を持つデータグリッドビューを使用しており、各行にはプログレスバーのあるセルがあります。
現在の問題は、各プログレスバーを個別に更新する方法がわからないことです。現在、選択されているすべてのプログレスバーが同じパーセンテージを示しており、ダウンロード 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");
}
}
(2 つ以上のファイルを同時にダウンロードすることもできません。最初の 2 つが完了するまで、3 つ目のダウンロードは開始されません)
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 を使用していることですが、必要な数を知らずにこれらのイベントを複数作成する方法がわかりません...
だから私は誰かがこれで私を助けることができることを願っています,
前もって感謝します!