2017-08-06 99 views
0

我想列出的文件下載使用WebClient的 但Web客戶端不允許在同一時間幾個動作和此代碼調用所有下載一次,但我想要的文件單獨下載C#下載文件結束下載

modlist.txt

mod1.jar 
mod2.jar 
mod3.jar 
mod4.jar 

代碼

private void DownloadingFiles() 
     { 
      if (!File.Exists(dir + "modlist.txt")) 
      { 
       client.DownloadFileAsync(new Uri(site + "modlist.txt"), dir + "modlist.txt"); 
      } 
     } 

     private void DownloadingMods() 
     { 
      var files = File.ReadAllLines(dir + "modlist.txt"); 
      foreach (var filename in files) 
      { 
       if (!File.Exists(dir + "mods/" + filename)) 
       { 

        client.DownloadFileAsync(new Uri(site + "mods/" + filename), dir + "mods/" + filename); 
       } 
      } 
     } 
+0

你需要徹底改變你的代碼,並使其不同步。 –

+1

如果你特別希望他們是一個一個,考慮改變'DownloadFileAsync'爲'DownloadFile'。 – mjwills

+0

[DownloadFile vs DownloadFileAsync]可能重複(https://stackoverflow.com/questions/21009162/downloadfile-vs-downloadfileasync) – mjwills

回答

0

您應該使用awaitasync like:

private async Task DownloadingFiles() 
    { 
     if (!File.Exists(dir + "modlist.txt")) 
     { 
      await client.DownloadFileTaskAsync(new Uri(site + "modlist.txt"), dir + "modlist.txt"); 
     } 
    } 

    private async Task DownloadingMods() 
    { 
     var files = File.ReadAllLines(dir + "modlist.txt"); 
     foreach (var filename in files) 
     { 
      if (!File.Exists(dir + "mods/" + filename)) 
      { 

       await client.DownloadFileTaskAsync(new Uri(site + "mods/" + filename), dir + "mods/" + filename); 
      } 
     } 
    } 
+0

'WebClient.DownloadFileAsync'是傳統的非'任務'返回方法。我相信你正在尋找的是'DownloadFileTaskAsync'。 –

+0

@KirillShlenskiy,你是對的,我已經更新了答案。我有點困惑,爲什麼在方法名稱中有Async。 –