2016-09-07 15 views
2

のWebClient DownloadFileAsyncを(動作しない)同じURLと資格証明では動作しません...WebクライアントDownloadFileAsync()

任意の手掛かり?

static void Main(string[] args) 
     { 
      try 
      { 
       var urlAddress = "http://mywebsite.com/msexceldoc.xlsx"; 


       using (var client = new WebClient()) 
       { 
        client.Credentials = new NetworkCredential("UserName", "Password"); 
        // It works fine. 
        client.DownloadFile(urlAddress, @"D:\1.xlsx"); 
       } 

       /*using (var client = new WebClient()) 
       { 
        client.Credentials = new NetworkCredential("UserName", "Password"); 

        // It y creats file with 0 bytes. Dunow why is it. 
        client.DownloadFileAsync(new Uri(urlAddress), @"D:\1.xlsx"); 
        //client.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 

       }*/ 
      } 
      catch (Exception ex) 
      { 

      } 
     } 
+5

文字通りプログラムの内容の場合、イベントが発生する前に 'Main'が終了しているからです。 Mainが終了すると、プロセスは終了します。同期バージョンをそのまま使用するか、イベントが発生するまで「Main」を終了する必要があります。 – vcsjones

答えて

4

非同期ダウンロードが完了している間は、別のスレッドで実行されるため、プログラムを実行したままにしておく必要があります。

このような何かを試してみてください、そして、それはあなたがプログラムを終了するにはEnterキーを押し前に完了言うのを待つ:

static void Main(string[] args) 
    { 
     try 
     { 
      var urlAddress = "http://mywebsite.com/msexceldoc.xlsx"; 

      using (var client = new WebClient()) 
      { 
       client.Credentials = new NetworkCredential("UserName", "Password"); 

       client.DownloadFileAsync(new Uri(urlAddress), @"D:\1.xlsx"); 
       client.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 
     } 
     catch (Exception ex) 
     { 

     } 

    Console.ReadLine(); 
    } 

public static void Completed(object o, AsyncCompletedEventArgs args) 
{ 
    Console.WriteLine("Completed"); 
} 

あなたはこれをで使用しているアプリの種類によっては、メインスレッドは維持する必要がありますバックグラウンドスレッドがファイルをダウンロードしている間に実行されます。

2

メイン関数をasyncと指定すると、DownloadFileTaskAsyncawaitを使用することもできます。

+0

これの利点は何ですか? – Paul

+0

'async'' await'を使うと 'Console.Readline()'でmain関数を中断する必要はありません。 'async-await'を使用したくない場合は、' client.DownloadFileTaskAsync()。Result'のように呼び出すと、main関数を強制的に待機させます。 – hellowstone

関連する問題