C # Загрузка нескольких файлов один за другим - PullRequest
0 голосов
/ 26 мая 2019

Я делаю это приложение, где мне нужно загрузить несколько файлов с моего сайта в зависимости от того, установлен флажок или нет.Я использую метод 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;
        }

Я пытался использовать async и ждать, но не смог заставить его работать.Короче говоря, как я могу заставить код загрузить первый файл полностью, затем добавить «1» в список и только затем перейти ко второму оператору if для загрузки второго файла.

Заранее спасибо.

...