Я тестирую некоторые особенности WebClient
класса, и я решил посмотреть, как DownloadProgressChanged
работает так я сделал такой код:Show Progress Использование WebClient Скачать
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());
}
Когда я запускаю это приложение, это то, что я вижу, как прогресс:
Выглядит ничего фантазии. Бен Албахари предлагает использовать новую тему вместо использования метода Async, и этот обработчик событий полезен, когда вы действительно используете метод Async.
Итак, как я могу показать прогресс по-настоящему?
EDIT:
Согласно MSDN это должно быть сделано:
Пассивная передачи файлов FTP всегда будет показывать прогресс процент нуля, так как сервер не отправлял размер файла , Для того, чтобы показать прогресс, вы можете изменить FTP соединение с активным путем переопределения GetWebRequest виртуальный метод:
Пример кода:
internal class MyWebClient:WebClient{
protected override WebRequest GetWebRequest(Uri address) {
FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address);
req.UsePassive = false;
return req;
}
}
Что я и сделал, но та же проблема бывает:
вы убедились, что код на самом деле инициируя без пассивной загрузки? (Посмотрите на журналы сервера или что-то еще) –