Похоже, что многие задают этот вопрос.
Насколько я могу судить, ваш сервер будет сообщать о ходе выполнения, только если он установлен, вы разрешаете активные подключения.Похоже, что PASV (пассивный FTP) может быть включен или отключен на сервере.И используемый режим должен определяться тем, какой сервер настроен для использования и что находится между сервером и клиентом.
РЕДАКТИРОВАТЬ: я включил System.Net.Tracing в моем проекте и пробовал как пассивный, так и активный режимы, а нетолько оба работают как положено ... TotalBytes по-прежнему -1, поэтому я думаю, что примечание по MSDN
http://msdn.microsoft.com/en-US/library/system.net.webclient.downloadprogresschanged(v=vs.80).aspx
ошибочно или мы что-то упустили.
http://compnetworking.about.com/cs/protocolsftp/g/bldef_pasv.htm
http://slacksite.com/other/ftp.html
http://fetchsoftworks.com/fetch/help/Contents/Concepts/ActiveAndPassive.html
Таким образом, переопределение метода WebRequest не будет иметь значения, если сервер не использует активные подключения.
Однако ... как вы можете видеть из своей командной строки, он правильно сообщает о полученных байтах.
Узнайте размер файла, и вас нет ...
Я предполагаю, что есть более эффективный метод, но ... Я использовал FtpWebRequest, чтобы получить размер файла перед загрузкой, а затем запустил DownloadFileAsync и передал размер файла в DownloadProgressCallback, используя:
Client.DownloadProgressChanges += (sender, e) => DownloadProgressCallback( fileSize, e)
Надеюсьэто помогает:)