C#一次下载多个文件

时间:2019-05-25 21:51:34

标签: c# asynchronous downloadfileasync

我正在制作此应用程序,必须根据是否选中此复选框从我的网站下载多个文件。我正在使用DownloadFileAsync方法下载文件。

我的问题是,一旦开始下载第一个文件。继续进行其余的代码。例如。它将在下载甚至完成之前在列表框中添加“ 1”,然后还将继续执行下一个if语句并对其执行下载,并在下载开始后立即将“ 2”添加到列表框中。下面是我正在使用的代码。

private void button1_Click(object sender, EventArgs e)
        {

            if (checkBox1.Checked)
            {
                WebClient client = new WebClient();
                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
                client.DownloadFileAsync(new Uri("https://speed.hetzner.de/100MB.bin"), "100mb");
                listBox1.Items.Add("1");
            }
             if (checkBox2.Checked)
            {
                WebClient client = new WebClient();
                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
                client.DownloadFileAsync(new Uri("https://speed.hetzner.de/100MB.bin"), "200mb");
                listBox1.Items.Add("2");
            }
        }


        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            double bytesIn = double.Parse(e.BytesReceived.ToString());
            double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
            double percentage = bytesIn / totalBytes * 100;

            progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
        }

        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            progressBar1.Value = 0;
        }

我尝试使用异步并等待,但是无法正常工作。简而言之,如何使代码完全下载第一个文件,然后将“ 1”添加到列表框中,然后仅移至第二个if语句以下载第二个文件。

谢谢。

0 个答案:

没有答案