2010-05-13 39 views
2

根據不WebClient.OpenFileAsync火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"); 
     } 
    } 
} 

對我來說,DownloadProgressChanged事件永遠不會觸發,但變化DownloadFileAsync或DownloadDataAsync和它的作用。

+0

我實際上有不同的結果(使用.Net4)。使用DownloadDataAsync()時,使用我的測試DownloadProgressChanged可以完美地觸發。但是如果我嘗試使用DownloadFileAsync(),它根本不會觸發! :/ – 2016-02-24 22:22:17

+0

在其他人遇到這種情況下,DownloadFileAsync()返回void,因此無法知道它是否會遇到錯誤,據我所知。在我的情況下,我沒有創建我正在下載的目錄。這導致該方法錯誤並且不觸發任何事件。創建下載文件夾後,我的文件正在下載到它,它按預期工作。 – 2016-02-24 22:37:01

回答

1

我已經看過框架的來源,並據我所知OpenReadAsync從來沒有觸及觸發DownloadProgressChanged的東西。

它不會像DownloadDataAsync和DownloadFileAsync那樣調用GetBytes,這反過來似乎正在開始啓動事件。

爲了解決這個問題,我剛剛使用了DownloadDataAsync,它會觸發事件並允許我提供下載的UI反饋。它返回一個字節數組而不是我需要的流,但這不是問題。

所以我假設這是MSDN在這裏是錯誤的,並且OpenReadAsync不會觸發DownloadProgressChanged。

+0

是的,這就是我在回答中告訴你的。自己聲稱答案並降低我的意見絕對不是本網站的精神。這個問題就像違反了本網站許可證中的「歸因所需」條款。我會請主持人看看。 – 2010-05-28 11:18:33

+0

對不起,你有這種感覺,如果我做錯了,我表示歉意。我想也許我沒有把這個問題說得很好。這真的是一個「我在這裏瘋了嗎?還是MSDN正在討論塗鴉?」 – 2010-06-01 14:35:30