У меня есть один исполняемый файл размером 164 МБ на сервере для установки пакета sccm. Я пытаюсь загрузить этот файл на клиентскую машину, используя метод WebClient Async.

Файл частично загружается большую часть времени. Установка не работает из-за этого. Добавление моего кода ниже.

PS :

hostpath="https://naagentswhk.cognizant.com/US_IBCM_InstallerV1.exe"
filepath="D:\Users\417193\AppData\Local\SupportSoft\expertouchent\417193\exec"

Код:

private static Boolean  DownloadFile(string HostPath,string Filepath)
{
    WebClient webClient = new WebClient();
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);

    // webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Downloader_DownloadProgressChanged);
    webClient.DownloadFileAsync(new Uri(HostPath), Filepath);

    return true;
}

Эта проблема связана с функцией Async?

c#
0
jerin 10 Авг 2015 в 06:51

2 ответа

Чтобы загрузить файл, я использую этот код, и он у меня работает

    private void button1_Click(object sender, EventArgs e)
    {
        WebClient webClient = new WebClient();
        webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
        webClient.DownloadFileAsync(new Uri("https://naagentswhk.cognizant.com/US_IBCM_InstallerV1.exe"), @"D:\Users\417193\AppData\Local\SupportSoft\expertouchent\417193\exec\US_IBCM_InstallerV1.exe");
    }
    private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    private void Completed(object sender, AsyncCompletedEventArgs e)
    {
        MessageBox.Show("Download completed!");
    }
1
Ahmed Mandour 10 Авг 2015 в 08:25
Спасибо Ахмеду за хороший и чистый код, но мне интересно несколько вещей: 1. В каком месте файл будет сохранен локально? 2. Ури какого сервера? Например. У меня есть приложение ABC, размещенное как abc.com на сервере XYZ, которое может быть доступно через xyz.net Каким должен быть параметр URI abc.com или xyz.net? Большое спасибо!
 – 
Navin Pandit
20 Янв 2019 в 05:13

Посмотрите когда и как использовать асинхронное ожидание

private static async Task DownloadFile(string HostPath,string Filepath)
{
    WebClient webClient = new WebClient();


    await webClient.DownloadFileAsync(new Uri(HostPath), Filepath);
}

// usage

private async void SomeMethod(){

   await DownloadFile("url", "path local');
   // it's ready for use. 
   ReadFile("path local)// File is already downloaded at this point
}
1
Community 23 Май 2017 в 15:22
Привет, вместо Async я использовал файл загрузки, и теперь он работает нормально.
 – 
jerin
11 Авг 2015 в 09:53
Это вариант. Но я думал, что вам нужна асинхронная операция. Решение выше будет полезно вам в случае, если вы хотите скачать файл, а не блокировать пользовательский интерфейс. Посмотрите предоставленную ссылку. Похоже, ваш вопрос был наводящим.
 – 
Artiom
11 Авг 2015 в 14:01