WebClient - 第二次调用时,DownloadFileAsync无法正常工作

时间:2016-09-22 13:50:57

标签: c# winforms webclient .net-4.6

我构建了下载单个文件的简单方法。当我第一次调用该方法时一切正常,但是当第二次调用时没有下载文件 以下是我的代码:

public void DownloadFile(string fileUrl, string path)
{
    using (var webClient = new WebClient())
    {
        webClient.DownloadFileCompleted += (sender, e) =>
        {
            if (e.Error == null & !e.Cancelled)
            {
                Debug.WriteLine(@"Download completed!");
            }
        };

        var url = new Uri(fileUrl);

        try
        {
            webClient.OpenRead(url);
            string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
            string filename = new ContentDisposition(headerContentDisposition).FileName;

            Debug.WriteLine(filename);

            path = Path.Combine(path, filename);
            webClient.DownloadFileAsync(url, path);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

我已经确定了破坏我下载的部分,它是负责获取文件名的部分:

webClient.OpenRead(url);
string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
string filename = new ContentDisposition(headerContentDisposition).FileName;

如果我用string filename = "1.tmp";替换该部分,我可以多次调用我的方法而没有错误。

我通过点击此事件点击按钮来调用该方法:

private void button1_Click(object sender, EventArgs e)
{
    const string url = @"http://www.jtricks.com/download-text";
    const string target = @"D:\TEMP\";
    DownloadFile(url, target);
}

两次点击按钮后没有获取文件名的代码我在控制台中获得此输出:

1.tmp
Download completed!
1.tmp
Download completed!

以下是显示此工作正常的gif: enter image description here

当我添加获取文件名的部分时,这是我的输出:

content.txt
Download completed!
content.txt

在gif下方显示该行为: enter image description here

我第二次点击开始我正在获取文件名,但下载没有开始,接下来点击块开始按钮。

我该如何解决这个问题?理想情况下,我想尽可能多地打电话给DownloadFile

1 个答案:

答案 0 :(得分:0)

似乎WebClient正在使用缓存。我建议您必须告诉WebClient不要使用缓存:

webClient.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);