//------------------------------------------- private void AddToDicImages(CCustomizableListItem item, CCacheImage cache) { m_dicItemToImage[item] = cache; if (m_dicItemToImage.Count > m_nMaxImagesInCache) { //Supprime l'image la plus vieille DateTime?dt = null; KeyValuePair <CCustomizableListItem, CCacheImage>?toDelete = null; foreach (KeyValuePair <CCustomizableListItem, CCacheImage> kv in m_dicItemToImage) { if (dt == null || kv.Value.LastAcces < dt.Value) { toDelete = kv; dt = kv.Value.LastAcces; } } if (toDelete != null) { if (toDelete.Value.Value.Image != null) { toDelete.Value.Value.Image.Dispose(); } m_dicItemToImage.Remove(toDelete.Value.Key); } } }
//------------------------------------------- public void RefreshItem(CCustomizableListItem item) { if (item != null) { lock (typeof(CLockerImages)) { CCacheImage cache = null; if (m_dicItemToImage.TryGetValue(item, out cache)) { if (cache.Image != null) { cache.Image.Dispose(); } m_dicItemToImage.Remove(item); } } } }
//------------------------------------------- public Image GetImage(CCustomizableListItem item, bool bKeepItemEnCours) { if (item == null) { return(null); } lock (typeof(CLockerImages)) { CCacheImage cache = null; if (m_dicItemToImage.TryGetValue(item, out cache)) { if (cache.Image.Size == new Size(m_controle.Size.Width, item.Height != null?item.Height.Value : m_controle.Height)) { cache.LastAcces = DateTime.Now; return(cache.Image); } else { cache = null; } } if (cache == null) { cache = new CCacheImage(); if (m_controle != null) { bool bOldEnEdition = m_bControlEnEdition; m_bControlEnEdition = false; cache.Image = m_controle.CreateImage(item, bKeepItemEnCours); m_bControlEnEdition = bOldEnEdition; if (cache.Image != null) { AddToDicImages(item, cache); return(cache.Image); } } } } return(null); }