2009-10-21 43 views
1

我的代碼提取的文件圖標(或者甚至是大拇指)。但是,如果我有很多文件,它可能需要一段時間。我試圖使用後臺線程來加載圖標。如何加載文件圖標在後臺線程[WPF]

  1. 從圖標提取的表單文件創建並存儲在列表中的位圖。似乎對於每個本地位圖,它只能在所有者線程中存在(即位於創建位圖的線程中)。

  2. 在UI線程創建的本地WPF位圖。

所以問題是,我不知道如何使用UI線程中後臺線程中創建的位圖。

- 或 -

2b中。在後臺創建線程WPF位圖,並在UI線程

使用他們。但問題是完全一樣的。

回答

3

你只需要凍結圖像加載後他們。凍結的對象是隻讀的,可安全地跨線程使用。例如:

private void _backgroundWorkerLoadImage_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BitmapImage img = new BitmapImage(); 
    img.BeginInit(); 
    img.UriSource = imageUri; 
    img.EndInit(); 
    img.Freeze(); 
    e.Result = img; 
} 

void _backgroundWorkerLoadImage_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    var img = e.Result as ImageSource; 
    imageControl.Source = img; 
} 
+0

工作正常!謝謝 – 2009-10-22 16:26:26

1

如果我理解你正確地做什麼,以提高性能可能會推出一些智能技術應用到它讀取文件圖標的過程的一種方式。

考慮一下在目錄中有很多.DOC文件的情況,並且沒有太多意義可以讀取它們中的所有文件圖標。

您將擁有一個已被讀取的文件圖標緩存,因此不需要讀取每個.DOC文件的文件圖標。有一個權衡這裏拿在內存中的圖像,但你應該能夠得到性能和使用太多內存之間的折中。

+0

你看,問題在於我不僅在談論圖標,而且還在談論通過shell擴展爲我生成的縮略圖。所以不同的doc文件會導致不同的大拇指。 .exe文件也是一樣 - 幾乎每個程序都有獨特的圖標。無論如何感謝您的重播 – 2009-10-22 16:25:13