C # Webclient загружает несколько файлов - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть еще один вопрос: (.
Я пытаюсь загрузить несколько файлов для моего приложения.

Мой вопрос: что я должен сделать, чтобы проверить, была ли сделана первая загрузка, а затем перейти ко второй загрузке и так далее?

Это мой код атм:

        private void DownloadBukkit()
        {
            MySingleton.Instance.FirstStartProgress = "Downloading Bukkit.jar... Please stand by...";
            webClient.DownloadFileAsync(new Uri(MySingleton.Instance.BukkitDownloadLink), Jar_Location);
            webClient.DownloadProgressChanged += backgroundWorker1_ProgressChanged;
            webClient.DownloadFileCompleted += (webClient_DownloadFileCompleted);
        }

        private void DownloadDll()
        {
            if (!webClient.IsBusy)
            {
                MySingleton.Instance.FirstStartProgress = "Downloading HtmlAgilityPack.dll... Please stand by...";
                webClient2.DownloadFileAsync(new Uri(Dll_HtmlAgilityPackUrl), Dll_HtmlAgilityPackLocation);
                webClient2.DownloadProgressChanged += backgroundWorker1_ProgressChanged;
                webClient2.DownloadFileCompleted += (webClient2_DownloadFileCompleted);
            }
        }

    void webClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
            DownloadDll();
    }


    void webClient2_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
         Invoke((MethodInvoker)
               Close);
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Invoke((MethodInvoker)
                   delegate
                       {
                           labelProgress.Text = MySingleton.Instance.FirstStartProgress;
                           progressBar1.Value = e.ProgressPercentage;
                       });
        }

Я проверил эту ссылку: DownloadFileAsync несколько файлов с помощью веб-клиента , но я не совсем понял, как это имплантировать :(. (Я совсем новичок в C #)

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Событие DownloadFileCompleted - это ваш сигнал о том, что вы закончили загрузку файла.

От MSDN:

Это событие вызывается каждый раз, когда операция асинхронной загрузки файла завершается .

Не ясно изВаш код, где и как объявляются webClient и webClient2, но, по сути, вы можете начать вторую загрузку, когда будет запущено первое событие DownloadFileCompleted.Однако обратите внимание, что вы можете выполнять загрузку 2 разных файлов одновременно при условии, что вы используете 2 отдельных экземпляра WebClient.

0 голосов
/ 02 апреля 2012

Вот код ускоренной перемотки, вы можете изменить его в соответствии с вашими требованиями.

 WebClient client = null;
        public FileDownloader()
        {
            InitializeComponent();
            client = new WebClient();
            client.DownloadProgressChanged += client_DownloadProgressChanged;
            client.DownloadFileCompleted += client_DownloadFileCompleted;
        }

        void client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            lblMessage.Text = "File Download Compeleted.";
        }

        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            lblMessage.Text = e.ProgressPercentage + " % Downloaded.";
        }

        private void StartDownload(object sender, RoutedEventArgs e)
        {
            if (client == null)
                client = new WebClient();

//Loop thru your files for eg. file1.dll, file2.dll .......etc.
            for (int index = 0; index < 10; index++)
            {
                //loop on files 
                client.DownloadFileAsync(
                    new Uri(
                            @"http://mywebsite.com/Files/File" + index.ToString() + ".dll"
                            , UriKind.RelativeOrAbsolute),
                    @"C:\Temp\file+" + index.ToString() + ".dll");
            }

        }
...