WebClient.OpenFileAsync запускает DownloadProgressChanged - PullRequest
2 голосов
/ 13 мая 2010

Согласно

http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadprogresschanged.aspx,

OpenFileAsync должен запускать DownloadProgressChanged всякий раз, когда он делает успехи.

Я вообще не могу заставить его выстрелить. Вместо этого работает нормально с DownloadDataAsync и DownloadFileAsync.

Вот простой пример:

using System;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient client = new WebClient();
            client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
            client.OpenReadAsync(new Uri("http://www.stackoverflow.com"));
            Console.ReadKey();
        }

        static void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.WriteLine("{0}% Downloaded", e.ProgressPercentage);
        }

        static void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            Console.WriteLine("Open Read Completed");
        }
    }
}

Для меня событие DownloadProgressChanged никогда не срабатывает, хотя измените его на DownloadFileAsync или DownloadDataAsync, и это произойдет.

1 Ответ

0 голосов
/ 13 мая 2010

Я посмотрел на исходный код фреймворка и, насколько я могу судить, OpenReadAsync никогда не касается того, что вызывает DownloadProgressChanged.

Он не вызывает GetBytes, как это делают DownloadDataAsync и DownloadFileAsync, что, в свою очередь, похоже, запускает событие.

Чтобы обойти это, я просто использовал вместо этого DownloadDataAsync, который вызывает событие и позволяет предоставлять обратную связь UI для загрузки. Он возвращает байтовый массив вместо нужного мне потока, но это не проблема.

Итак, я предполагаю, что это MSDN здесь не так, и OpenReadAsync не запускает DownloadProgressChanged.

...