2011-11-11 20 views
1

我有同樣的問題在this question指出,問題的回答,答案也似乎在我的問題(理論上)的工作。但我不知道如何實施the answer provided如何使用調度程序來加載多個圖像

這表明,加載多個圖像時,我批他們,只是做了一些,然後使用調度員開始對未來幾年的工作。

我試圖編寫一個名爲LoadNextFive(int startIndex)的函數,並且在函數結尾處它自己像這樣調用它:this.Dispatcher.BeginInvoke(() => { LoadNextFive(startIndex + 5); });,但它似乎不起作用。我是否使用調度程序錯誤或者我是否執行了錯誤的答案?

- 編輯 - 我目前試圖在當時只加載1個圖像。

public void LoadNextImage() 
{ 
    if(m_enumerator.MoveNext()) 
    { 
     if (!m_bitmapSources.ContainsKey(m_enumerator.Current)) 
     { 
      ZipEntry imageEntry = m_zip.GetEntry(m_enumerator.Current); 
      using (Stream imageStream = m_zip.GetInputStream(imageEntry)) 
      { 
       BitmapImage source = new BitmapImage(); 
       source.SetSource(imageStream); 

       m_bitmapSources.Add(m_enumerator.Current, source); 
      } 

      m_dispatcher.BeginInvoke(() => LoadingTemplate.ChangeText(this, "")); //change loadingtext (provides % in future) and it calls this function again 
     } 
     else 
     { 
      m_dispatcher.BeginInvoke(() => LoadNextImage()); 
     } 
    }else{ 
     //starts after every image is done loading 
     LoadPages(); 
     LoadMonths(); 

     OnLoadComplete(new EventArgs()); 
    } 
} 
+0

你可以提供其餘的LoadNextFive方法嗎? –

回答

1

看來,當我改寫了我的代碼,我忘了重寫的部分。因此仍然是錯誤。上面的代碼工作正常。所以我的問題現在已經過時了。

0

您提到的問題和答案是關於您可以一次將多少圖像加載到應用程序域以及產生的內存壓力。你的問題似乎是與Dispatcher異步加載圖像。

對於配料,我會使用任務的Parallels庫(TPL)。它有一個ContinueWith方法,可以很好地完成一些工作,並在最初的工作完成時繼續工作。

TPL提供圍繞需要幾個鏈接任務異步,然後回調到UI線程(我假設你想在UI某處顯示圖像)一些非常不錯的功能。

+0

我也在同一時間加載大量圖像。接受的答案來自微軟的錯誤響應,他們建議我使用調度器。我不想加載它們的asyn,但他們說這個過程需要返回到UI,因此可以清除對位圖的引用。 – SynerCoder

相關問題