DownloadProgressChanged

DownloadProgressChanged

根据

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");
        }
    }
}


对我来说,即使更改为DownloadFileAsync或DownloadDataAsync,也不会触发DownloadProgressChanged事件。

最佳答案

我看过框架的源代码,据我所知,OpenReadAsync从未涉及触发DownloadProgressChanged的内容。

它没有像DownloadDataAsync和DownloadFileAsync那样调用GetBytes,这反过来似乎开始了该事件。

要解决此问题,我只使用DownloadDataAsync,它确实触发了事件,并允许我为下载提供UI反馈。它返回一个字节数组,而不是我需要的流,但这不是问题。

因此,我假设这里是MSDN错误,并且OpenReadAsync不会触发DownloadProgressChanged。

09-10 15:19