2015-02-10 62 views
0

我有一個圖片鏈接列表。現在我想循環瀏覽列表併爲每個鏈接下載圖片並在圖片中顯示。我的代碼下載並在循環中顯示圖片

private void bDownload_Click(object sender, RoutedEventArgs e) 
    { 
     string typedUrls = tbLinks.Text; 
     string source = getPageSource(typedUrls); 
     List<String> links = ExtractLinks(source); 
     string threadID = getThreadID(typedUrls); 


     for (int i = 0; i < links.Count; i++) 
     { 
      string path = downloadPic(links.ElementAt(i), threadID); 
      showPicture(path); 
     } 
    } 

private void showPicture(string path) 
    { 
     var uri = new Uri(path); 
     iLatest.Source = new BitmapImage(uri); 
    } 

當我運行它下載圖片,但只有最後一張圖片顯示。如何管理?

回答

1

你的循環同步運行:

//A synchronous (not asynchronous) loop! 
    for (int i = 0; i < links.Count; i++) 
    { 
     string path = downloadPic(links.ElementAt(i), threadID); 
     showPicture(path); 
    } 

這意味着,用戶界面變得沒有機會因爲它們下載到顯示圖像。它確實在最後返回控制時更新,顯示最後的圖片。

如果要在下載時顯示每個圖像,則需要將下載移至另一個線程或方法async

如果您想循環瀏覽之後的每個圖片,則會下載它們,您只需要一個計時器和循環訪問圖像集的代碼即可。

+0

但你能告訴如何做到這一點?我已將downloadPic更改爲async並調用字符串path = await downloadPic(links.ElementAt(i),threadID),但它不能那麼簡單,因爲它仍然不起作用。 – korek 2015-02-10 00:37:46

+0

@korek這應該至少有幫助...下載需要多長時間?它們的速度如此之快,即使它的異步只顯示最後一個?拋出一個'await Task.Delay(2000)'將有助於確認/否定 – BradleyDotNET 2015-02-10 00:40:15

+0

加入延遲之後,它立即顯示圖片。但是,如果圖片很小,它的下載(或顯示)會更快,而Task.Delay會延長它。有沒有辦法「修復」? – korek 2015-02-10 00:45:34