你介意垂直滾動?
我將開始與DataGridView控件爲基礎,創建以下實現:
1)創建自定義的列和單元格類型從DataGridViewImageColumn獲得。你可以稱它們爲「CronosNetImageColumn」,「CronosNetImageCell」。 2)創建一個類「CronosImageDetails」來保存單元格數據(包括顯示文本和圖像url的屬性)。這將作爲每個單元格的值傳入。例如:
ImageGrid.Rows.Add(new CronosImageDetails {DisplayText =「Day at the Beach」,ImageURL =「http://...beach.jpg」});
3)覆蓋單元格Paint()使用WebClient獲取圖像並使用e.Graphics.DrawImage(ImageObtainedFromWebClient)將圖像繪製到單元格中。您可以使用e.Graphics.DrawString((CronosImageDetails)value.DisplayText ...)覆蓋單元格中的文本。
這個快速解決方案將爲您提供一個滾動圖像列表,只有在用戶滾動瀏覽列表時才加載圖像,併爲改進提供了堅實的基礎。
推薦進一步優化:
A)創建一個後備緩衝位圖和圖形繪製單元數據。
B)設置paint()來簡單地畫後備緩衝,而不是做的工作來獲得圖像
C)創建一個新的細胞方法的LoadImage(),它產生一個新線程下載圖像和油漆它到後臺緩衝區。 D)Paint()(或一個單獨的輔助線程)跟蹤滾動的方向和加速度,並估計需要預加載哪些單元格。在這些單元上觸發LoadImage()。 E)用加載圖像初始化每個單元的後臺緩衝區。 F)跟蹤並使用來自圖像加載時間的經驗數據,以幫助確定哪些單元需要預加載。
謝謝,讓我試試loadAsync()方法,我正在做你提到的確切方法 – Azlam 2008-11-26 04:31:58