我正在编写一个管理游戏模组/插件库的应用程序。每隔一段时间,这些 mod 中的一个都有可用的更新,并且使用 WebClient.DownloadFileAsync() 下载新版本,通过读取 WebRequest 响应中的 Content-Disposition 检索文件名。
当有两个或更多更新可用时,第一个下载非常好,但是当您尝试下载第二个文件而不重新启动应用程序时,WebClient 冻结,该文件是使用检索到的名称创建的,但包含 0 个字节,并且没有 DownloadProgressChanged 或 DownloadFileCompleted 事件被触发。
如果我不尝试检索原始文件名,而只是在本地为它们命名,那么 WebClient 不会冻结。但我需要原始文件名。
我可以做些什么来避免这个问题,同时仍然能够检索原始文件名?
private void Download(string url, string downloadDirectory)
{
WebClient wc = new WebClient();
string filename = FilenameFromURL(url);
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgress);
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadComplete);
wc.DownloadFileAsync(new Uri(url), downloadDirectory + filename);
}
private string FilenameFromURL(string url)
{
return new ContentDisposition(WebRequest.Create(url).GetResponse().Headers["Content-Disposition"].ToString()).FileName;
}
private void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
{
downloadProgressBar.Value = e.ProgressPercentage;
}
private void DownloadComplete(object sender, AsyncCompletedEventArgs e)
{
// ...
}