我存儲在一個文本文件中多個URL,它們中的每一個環節導致Facebook的表情符號,像https://www.facebook.com/images/emoji.php/v5/u75/1/16/1f618.png等待頁面加載
我試圖下載這些圖像,並將其儲存在我的磁盤上。我使用的Web客戶端與DownloadFileAsync,像
using (var client = new WebClient())
{
client.DownloadFileAsync(imgURL, imgName);
}
我的問題是,即使網址的量很小,比如10,一些圖像被下載好了,一些給我一個文件損壞的錯誤。所以我想我需要等待下載文件,直到結束,並添加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();
}
}
它並沒有幫助,我決定仔細看到已損壞的文件。
看起來,損壞的文件實際上不是圖像文件,而是HTML頁面,它們有一些重定向JavaScript代碼到圖像,或者是完整的HTML頁面,說我的瀏覽器不受支持。
所以我的問題是,我該如何等待圖像文件已完全加載並準備下載?
編輯我也嘗試刪除using
聲明,但這也沒有幫助。
可能與您當前的問題沒有關係,但是您正在啓動異步進程,然後*處置*對象,你已經開始了異步處理(通過'using'語句)。我希望在這裏改進對象管理,以便在實際完成之前不要「拋棄」WebClient。雖然你仍然試圖讓基礎知識正確,但我可能會建議現在忽略異步。 –
@Damien_The_Unbeliever嘗試沒有異步,但只下載一個文件(可能在這裏丟失的東西)。關於刪除使用語句 - 這沒有幫助,請參閱下面的我的評論。 –
只需添加該編輯功能就不像提供之前請求的[mcve]一樣有用。 –