2

WebClient DownloadFileAsync() は、同じ URl と資格情報では機能しません...

どんな手掛かり?

 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)
            {

            }
        }
4

2 に答える 2

5

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

次のようなことを試して、完了と表示されるのを待ってから、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");
}

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

于 2016-09-07T13:40:11.083 に答える
3

Main 関数を として宣言することで、 と併用するasyncこともできます。DownloadFileTaskAsyncawait

public static async void Main(string[] args)
{
    var urlAddress = "http://mywebsite.com/msexceldoc.xlsx";
    var fileName = @"D:\1.xlsx";

    using (var client = new WebClient())
    {
        await client.DownloadFileTaskAsync(new Uri(urlAddress), fileName);
    }
}
于 2016-09-07T14:09:33.720 に答える