仅在文件下载后才调用DownloadProgressChanged

时间:2019-01-24 18:39:54

标签: c#

我正在尝试使用进度条来跟踪我的下载,唯一的问题是进度值仅在文件下载到计算机后才更改,而不是在下载过程中更改。

这是我的代码,我们将不胜感激。

public void DownloadZaq()
    {

        using (WebClient zaq = new WebClient())
        {
            zaq.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Zaq_DownloadProgressChanged);
            zaq.DownloadFileCompleted += new AsyncCompletedEventHandler(Zaq_DownloadFileCompleted);
            zaq.DownloadFileAsync(new Uri(http://example.com), @"c:\to\111.jpg");
        }
    }


    public void Zaq_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        MessageBox.Show("download completed");
    }

    public void Zaq_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

1 个答案:

答案 0 :(得分:0)

我认为DownloadFileAsync在检查DNS时以某种方式阻塞了主线程。这就是我会尝试的

WebClient zaq;
public void DownloadZaq()
{
  zaq = new WebClient();
  zaq.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Zaq_DownloadProgressChanged);
  zaq.DownloadFileCompleted += new AsyncCompletedEventHandler(Zaq_DownloadFileCompleted);
  System.Threading.Tasks.Task.Run(() => // Workaround to allow Async call
  {
    try
    {
      zaq.DownloadFileAsync(new Uri(http://example.com), @"c:\to\111.jpg");
    }
    catch (Exception ex)
    {
      zag.Dispose();
    }
  });
}

public void Zaq_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
  MessageBox.Show("download completed");
  zag.Dispose();
}

public void Zaq_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
  progressBar1.Value = e.ProgressPercentage;
}
相关问题