私は、テキストファイルに保存されているいくつかのURLを持って、それらのそれぞれが、私はこれらのイメージをダウンロードし、それらを格納しようとしているhttps://www.facebook.com/images/emoji.php/v5/u75/1/16/1f618.pngWebクライアントをダウンロードする前に、ページの読み込みを待っ
のようなFacebookの絵文字につながるリンクがあります私のディスクに。私は
using (var client = new WebClient())
{
client.DownloadFileAsync(imgURL, imgName);
}
のようなものが私の問題は、いくつかは私にファイル破損しているエラーを与え、画像の一部がOKにダウンロードされ、10を言う、URLの量が少なくてもある、DownloadFileAsyncでWebクライアントを使用しています。だから、私は最後まで、ダウンロードするファイルのを待つために必要な考えとDownloadFileCompletedイベントを追加し、この
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using System.Net;
class Program
{
static Queue<string> q;
static void Main(string[] args)
{
q = new Queue<string>(new[] {
"https://www.facebook.com/images/emoji.php/v5/u51/1/16/1f603.png",
"https://www.facebook.com/images/emoji.php/v5/ud2/1/16/1f604.png",
"https://www.facebook.com/images/emoji.php/v5/ud4/1/16/1f606.png",
"https://www.facebook.com/images/emoji.php/v5/u57/1/16/1f609.png",
"https://www.facebook.com/images/emoji.php/v5/u7f/1/16/1f60a.png",
"https://www.facebook.com/images/emoji.php/v5/ufb/1/16/263a.png",
"https://www.facebook.com/images/emoji.php/v5/u81/1/16/1f60c.png",
"https://www.facebook.com/images/emoji.php/v5/u2/1/16/1f60d.png",
"https://www.facebook.com/images/emoji.php/v5/u75/1/16/1f618.png",
"https://www.facebook.com/images/emoji.php/v5/u1e/1/16/1f61a.png"
});
DownloadItem();
Console.WriteLine("Hit return after 'finished' has appeared...");
Console.ReadLine();
}
private static void DownloadItem()
{
if (q.Any())
{
var uri = new Uri(q.Dequeue());
var file = uri.Segments.Last();
var webClient = new WebClient();
webClient.DownloadFileCompleted += DownloadFileCompleted;
webClient.DownloadFileAsync(uri, file);
}
else
{
Console.WriteLine("finished");
}
}
private static void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
DownloadItem();
}
}
のようにそれは助けにはならなかったと私は破損しているファイルによく見ることにしました。
破損したファイルは実際にはイメージファイルではなく、リダイレクションJavaScriptコードがイメージにあるか、ブラウザがサポートされていないことを示す完全なHTMLページであったかのようです。
私の質問は、イメージファイルが完全にロードされ、ダウンロードする準備ができているのを実際にどのように待つのですか?
EDIT私もusing
ステートメントを削除しようとしましたが、それでも役に立たなかったです。
は、あなたの現在の問題に関連していない可能性がありますが、あなたは非同期プロセスをキックオフしてから*の*廃棄している
あなたは非同期プロセスを( 'using'ステートメントを介して)始めました。私はあなたのオブジェクト管理を改善して、あなたが実際に実行されるまであなたの 'WebClient'の' Dispose'をしないようにしたいと思います。あなたはまだ基本を正しく理解しようとしていますが、今は非同期を無視することをお勧めします。 –@Damien_The_Unbeliever非同期なしでも試しましたが、1つのファイルしかダウンロードされません。 usingステートメントの削除について - それは役に立たなかった、以下の私のコメントを参照してください。 –
その編集を追加するだけで、私が以前に要求した[mcve]を提供するほど役に立ちません。 –