2014-04-18 19 views
0

如何使這段代碼在最後一個已經被使用時選擇數組中的下一個項目?
有了它不罰款(似乎)的鏈接。它只有正確添加的第一個文件名,別人的文件名作爲「System.String []」如何使這段代碼在最後一個已經被使用時選擇數組中的下一個項目?

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Net; 
    using System.IO; 
    using System.Diagnostics; 
    using System.ComponentModel; 

    namespace J98_MP_CS 
    { 
     class Download 
     { 
      private static Queue<string> _items = new Queue<string>(); 
      static string dl_loc = "C:\\ProgramData\\jyrka98\\";   
      public static void Start() 
      { 
       string[] file_link_array = { 
               "LINK1" 
               "LINK2" 
              };  
       foreach (string i in file_link_array) { _items.Enqueue(i); } 
       DownloadItem(); 
      }  
      private static void DownloadItem() 
      { 
       string[] file_name_array = { 
                "xvm_main_files.zip", 
                "jyrka98_xvm.zip", 
                "premium_hangar.zip", 
                "J1mB0_crosshair.zip", 
                "J1mB0_contour_icons_v1.zip", 
                "J1mB0_contour_icons_v2.zip", 
                "multiline_tank_carousel.zip", 
                "white_dead_tanks.zip" 
               }; 
       if (_items.Any()) 
       { 
        var nextItem = _items.Dequeue(); 

        WebClient WC = new WebClient(); 
        WC.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0"); 
        WC.DownloadFileCompleted += new AsyncCompletedEventHandler(WC_DownloadFileCompleted); 
        WC.DownloadFileAsync(new Uri(nextItem), Path.Combine(dl_loc + file_name_array)); 
        return; 
       } 
      } 

      private static void WC_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
      { 
       DownloadItem(); 
      } 
     } 
    } 

*注:我把僅有的兩個鏈接在這裏,而不是8使代碼更短。

回答

1

這有幫助嗎?引入了一個類來保存鏈接和本地文件名。我認爲這是你想要的。然後爲每個鏈接/文件名組合排隊一個條目。我把這個班級放在最上面,只是爲了將它們放在一起。

class LinkAndFileName 
    { 
     public LinkAndFileName(string initLink, string initFileName) 
     { 
      link = initLink; 
      fileName = initFileName; 
     } 

     public string link { get; set; } 
     public string fileName { get; set; } 
    } 


    private static Queue<LinkAndFileName> _items = new Queue<LinkAndFileName>(); 
    private static List<string> _results = new List<string>(); 
    static string dl_loc = "C:\\ProgramData\\jyrka98\\"; 
    public static void Start() 
     { 
      LinkAndFileName[] file_link_array = new [] 
      { 
       new LinkAndFileName("LINK1", "xvm_main_files.zip"), 
       new LinkAndFileName("LINK2", "jyrka98_xvm.zip"), 
       new LinkAndFileName("LINK3", "premium_hangar.zip"), 
       new LinkAndFileName("LINK4", "J1mB0_crosshair.zip"), 
       new LinkAndFileName("LINK5", "J1mB0_contour_icons_v1.zip"), 
       new LinkAndFileName("LINK6", "J1mB0_contour_icons_v2.zip"), 
       new LinkAndFileName("LINK7", "multiline_tank_carousel.zip"), 
       new LinkAndFileName("LINK8", "white_dead_tanks.zip"), 
      }; 

      foreach (LinkAndFileName fileLink in file_link_array) { _items.Enqueue(fileLink); } 
      DownloadItem(); 
     } 

    private static void DownloadItem() 
    { 
     if (_items.Any()) 
     { 
      LinkAndFileName nextItem = _items.Dequeue(); 

      WebClient WC = new WebClient(); 
      WC.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0"); 
      WC.DownloadFileCompleted += new AsyncCompletedEventHandler(WC_DownloadFileCompleted); 
      WC.DownloadFileAsync(new Uri(nextItem.link), Path.Combine(dl_loc + nextItem.fileName)); 
      return; 
     } 
    } 

    private static void WC_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
     DownloadItem(); 
    } 
相關問題