WebClient.DownloadProgressChanged never gets called

后端 未结 2 499
我寻月下人不归
我寻月下人不归 2021-01-02 14:10

I added an event handler to the WebClient\'s DownloadProgressChanged event, but it never seems to fire. The file successfully downloads, but without having its

2条回答
  •  日久生厌
    2021-01-02 14:51

    If you want to use WebClient synchronously, while getting progress updates you can rely on this method detailed here

    http://alexfeinberg.wordpress.com/2014/09/14/how-to-use-net-webclient-synchronously-and-still-receive-progress-updates/

    public void DownloadFile(Uri uri, string desintaion)
    {
      using(var wc = new WebClient())
      {
        wc.DownloadProgressChanged += HandleDownloadProgress;
        wc.DownloadFileCompleted += HandleDownloadComplete;
    
        var syncObject = new Object();
        lock(syncObject)
        {
           wc.DownloadFileAsync(sourceUri, destination, syncObject);
           //This would block the thread until download completes
           Monitor.Wait(syncObject);
        }
      }
    
      //Do more stuff after download was complete
    }
    
    public void HandleDownloadComplete(object sender, AsyncCompletedEventArgs args)
    {
       lock(e.UserState)
       {  
          //releases blocked thread
          Monitor.Pulse(e.UserState);
       }
    }
    
    
    public void HandleDownloadProgress(object sender, DownloadProgressChangedEventArgs args)
    {
      //Process progress updates here
    }
    

提交回复
热议问题