外观
ListView虚拟模式
public partial class nocache : Form
{
public nocache()
{
InitializeComponent();
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
}
private string[] imagePaths;
private ImageList imageList = new ImageList();
private Dictionary<int, Image> imageCache = new Dictionary<int, Image>();
private Dictionary<int, string> pathCache = new Dictionary<int, string>();
private void nocache_Load(object sender, EventArgs ee)
{
listView1.VirtualMode = true;
listView1.View = View.LargeIcon;
imageList.ImageSize = new Size(99, 99);
listView1.LargeImageList = imageList;
listView1.RetrieveVirtualItem += (s, e) =>
{
string str = "当前项:" + e.ItemIndex;
if (imageCache.ContainsKey(e.ItemIndex))
{
str += $"取缓存的:{pathCache[e.ItemIndex]}";
using (Image image = imageCache[e.ItemIndex])
{
ListViewItem item = new ListViewItem(e.ItemIndex.ToString());
item.ImageIndex = e.ItemIndex;
e.Item = item;
}
}
else
{
string imagePath = imagePaths[e.ItemIndex];
str += $"新增的{e.ItemIndex} = {imagePath}";
using (Image image = Image.FromFile(imagePath))
{
ListViewItem item = new ListViewItem(e.ItemIndex.ToString());
item.ImageIndex = e.ItemIndex;
item.Text = imagePath;
e.Item = item;
imageList.Images.Add(image);
//imageCache[e.ItemIndex] = image;
imageCache.Add(e.ItemIndex, image);
pathCache.Add(e.ItemIndex, imagePath);
}
}
Console.WriteLine(str);
};
}
private void button1_Click(object sender, EventArgs e)
{
string[] files = Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "img"));
imagePaths = files.Where(t => new[] { ".png", ".jpg", ".jpge" }.Any(t.ToLower().EndsWith)).ToArray();
this.Text = "共共共共共共共共共 " + imagePaths.Count().ToString() + " 张!";
listView1.VirtualListSize = imagePaths.Length;
}
}