相关疑难解决方法(0)

WebClient.DownloadFileAsync - 一次下载一个文件

我使用下面的代码从TFS服务器下载多个附件:

foreach (Attachment a in wi.Attachments)
{    
    WebClient wc = new WebClient();
    wc.Credentials = (ICredentials)netCred;
    wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
    wc.DownloadFileAsync(a.Uri, "C:\\" + a.Name);
}
Run Code Online (Sandbox Code Playgroud)

我想使用DownloadFileAsync下载多个文件,但我希望逐个下载它们.

有人可能会问"你为什么不使用同步的DownloadFile方法?" 这是因为:

  1. 我想利用DownloadFileAsync提供的事件.
  2. 我不想创建Webclient的多个实例以避免泛滥服务器.

这是我想到的解决方案:

foreach (Attachment a in wi.Attachments)
{        
    WebClient wc = new WebClient();
    wc.Credentials = (ICredentials)netCred;
    wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
    wc.DownloadFileAsync(a.Uri, "C:\\" + a.Name);
    while (wc.IsBusy)
    {
        System.Threading.Thread.Sleep(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这种方法存在一些问题:

  1. Thread.Sleep()正在锁定我的表单.我仍然需要创建自己的Thread或使用BackgroundWorker.(我想尽可能避免这种情况)
  2. 下载所有文件后,将触发DownloadFileCompleted事件.我不知道这是否是使用System.Threading.Thread.Sleep(1000)的副作用;

有没有更好的方法使用WebClient.DownloadFileAsync一次下载一个文件?

谢谢!

c# asp.net multithreading webclient download

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

asp.net ×1

c# ×1

download ×1

multithreading ×1

webclient ×1