2015-07-06 3 views
0

Я пытаюсь загрузить мерзавца из этого URLDownloadFile работает, DownloadFileAsync получает 0 байт файла

https://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20150319/Git-1.9.5-preview20150319.exe 

Я сделал это с помощью DownloadFile, он работал нормально.

Теперь я пытаюсь сделать это с помощью метода Async, но он загружает 0 байтовый файл. Вот код:

public void downloadFile(string urlAddress, string location) 
{ 
    using (var downloadClient = new WebClient()) 
    { 
     downloadClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(Completed); 
     downloadClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 

     Uri URL = urlAddress.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ? new Uri(urlAddress) : new Uri("http://" + urlAddress); 
     _downloadStopWatch.Start(); 
     try 
     { 
      downloadClient.DownloadFileAsync(URL, location); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     _downloadStopWatch.Stop(); 

     while (downloadClient.IsBusy) { } 
    } 
} 

где:

private string _location = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\test.exe"; 

И urlAddress набрана в текстовом поле и передается TextBox.Text

Я проверить Завершена обработчик и он говорит завершен.

Почему я получаю 0-байтовый файл?

+1

Забавно, что ваш код не работает с описанной URL, как он использует схему HTTPS. И если я изменю его на http, он будет работать как ожидалось ... –

+0

Вау, я пропустил это. Исправлено, теперь это работает, спасибо. – Januszoff

ответ

0

Параметр завершенных методов AsyncCompletedEventArgs возвращает ошибку The remote name could not be resolved: 'https'.

В этом случае вы должны падать обратно на HTTP

В зависимости от целевой структуры можно также использовать await downloadClient.DownloadFileTaskAsync(urlAddress, location);

+0

действительно, используя ожидание. Это путь в эти дни. –

Смежные вопросы