我測試WebClient
類的一些特點,我決定看看DownloadProgressChanged
工作,所以我做出了這樣的代碼:顯示進度使用Web客戶端下載
static void Main(string[] args)
{
WebClient client = new WebClient();
client.Proxy = null;
client.BaseAddress = "ftp://ftp.xxxxxxx.com";
CredentialCache cache = new CredentialCache();
NetworkCredential credential = new NetworkCredential("userxxx", "passxxxx");
client.Credentials = credential;
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
Uri remoteFile;
Uri.TryCreate("/public_html/folderxxxx/Pictures/Product/Resized/1.jpg", System.UriKind.Relative, out remoteFile);
client.DownloadFileAsync(remoteFile, "1.jpg");
System.Diagnostics.Process.Start("1.jpg");
Console.ReadLine();
}
static void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.WriteLine(e.ProgressPercentage.ToString());
}
當我運行該應用程序,這是我所看到的進度:
看起來沒有什麼花哨。 Ben Albahari建議使用新線程而不是使用Async方法,並且在實際使用Async方法時,此事件處理程序非常有用。
那麼,我該如何真正地顯示進度?
編輯:
根據MSDN應該是這樣的:
被動FTP文件傳輸將始終顯示的 零進度百分比,因爲服務器沒有文件大小。出現進展, 您可以通過重寫 GetWebRequest虛方法更改FTP連接到主動:
示例代碼:
internal class MyWebClient:WebClient{
protected override WebRequest GetWebRequest(Uri address) {
FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address);
req.UsePassive = false;
return req;
}
}
這是我沒有,但同樣的問題發生了:
您已經驗證您的代碼實際上是發起非被動下載? (看看服務器日誌什麼的) – 2012-03-24 03:03:29