我已經開發了一個WPF應用程序加載在它正在再寄一次listbox.To負載300MB圖像的圖像聽說要在列表框中更快加載圖像,我們必須使用的ObservableCollection ,但我不知道如何使用那個。 任何建議plz .. 在此先感謝如何創建一個ObservableCollection類在WPF應用程序加載圖像
回答
一個ObservableCollection可以完全像一個List一樣使用。但是,這將不利於加載圖像更快...
你應該做的是你的列表框綁定到包含圖像一個ObservableCollection,並在一個單獨的線程的圖像填充集合。通常不可能從另一個線程修改綁定集合,但是我寫了一個可以處理這個問題的類AsyncObservableCollection。
只需將您的圖像轉換成一個ObservableCollection
不會神奇地讓他們加載速度更快。可能需要這麼長時間的是從磁盤加載圖像數據。您應該將其移至後臺線程,以便加載圖像數據時不會掛起主UI線程。看看使用BackgroundWorker或Dispatcher,這樣你就不必親自編寫所有的線程代碼。
你只需要的ObservableCollection:如果您要添加/刪除/集合中的替代項目,並期待UI到這些變化自動更新。也就是說,ObservableCollection對Thomas或Andy的後臺線程加載建議來說是完美的。
這是另一個值得一提的可能性,但它有一定的侷限性。 ListBox僅爲當前滾動到視圖中的列表項目創建UI元素。如果一次只能在列表框中看到少量圖像,而其他圖像將全部從視圖中滾動出來,那麼您可以利用這一點,並讓ListBox只是延遲加載圖像。
對於這一點,你不會把實際的圖像對象在列表框中。相反,你會放一些可以按需加載圖像的東西。如果您要從磁盤或Web上加載圖像,該列表可能包含Uris。如果您正在從Web服務加載這樣的事情,那麼該列表可能包含具有延遲加載映像的Image屬性的類的實例。
然後將您的集合(任何列表,不一定是ObservableCollection)綁定到ListBox,並將ItemTemplate設置爲DataTemplate,該DataTemplate構造適當的UI並綁定到Uri或延遲加載的Image屬性。
上行:簡單。無需編寫線程代碼。
缺點:這將取決於數據量,但是這很可能使滾動緩慢,因爲直到你開始滾動後的圖像不會加載。另外,正如我所指出的,如果大多數圖像在第一次顯示時都適合列表框,那麼這不會讓您獲得太多收益,而線程化會是更好的答案。而Uri有一個很大的問題,一旦你向下滾動,ListBox會丟棄它爲第一項加載的圖像,所以滾動備份將像滾動一樣慢(儘管自定義類與一個懶加載屬性會解決這個問題)。
- 1. WPF創建按鈕和加載圖像
- 2. 你如何創建一個Android應用程序的標題屏幕?例如。當應用程序加載像Facebook
- 3. 在WPF應用程序中加載圖像
- 4. AS3加載程序() - 使用一個加載程序加載多個圖像
- 5. 在.NET中創建一個圖像按鈕Winforms應用程序
- 6. android:如何在另一個應用程序中加載類
- 7. 如何創建一個observableCollection可排序和多線程
- 8. 如何爲整個應用程序創建一個全局類?
- 9. 如何創建一個像門的Facebook應用程序
- 10. 如何創建一個「脈衝」像UI的Android應用程序
- 11. 如何使用多個XAML文件創建WPF應用程序?
- 12. 如何在部署的應用程序中加載圖像?
- 13. 如何在我的應用程序加載時顯示圖像
- 14. 如何在iphone應用程序中的UITableCell中加載圖像
- 15. 如何在Android中加載應用程序時顯示圖像?
- 16. 如何在加載iphone應用程序時顯示圖像?
- 17. 在WPF應用程序中顯示一個巨大的圖像
- 18. iPhone /如何創建一個類似Facebook的應用程序?
- 19. 如何創建一個類似PHP的Winsocks應用程序?
- 20. 創建一個ObservableCollection <T>類
- 21. wpf加載一個gif圖像動畫
- 22. 通過php文件動態創建反應應用程序和加載圖像
- 23. UITableView在應用程序加載後加載圖像
- 24. 如何在WPF應用程序中使用CheckBox創建DropdownList?
- 25. 在jQuery中創建一個圖像並加載後加入DOM
- 26. 爲Android應用程序創建類圖
- 27. 爲iPhone應用程序創建類圖
- 28. 如何在gcc創建的應用程序中添加圖標?
- 29. 如何在WPF應用程序中使用Interop.WIA掃描圖像
- 30. 如何創建一個類似RAID1(鏡像)的程序?
我嘗試過backgroundworker,但它仍然很慢。 – ibrahimkhan 2009-06-08 12:39:48