C# 列表视图<--&燃气轮机;ImageList将不同步

C# 列表视图<--&燃气轮机;ImageList将不同步,c#,.net,winforms,listview,imagelist,C#,.net,Winforms,Listview,Imagelist,我正在使用ListView加载和显示图像文件的缩略图。我为每个ListViewItem使用的“名称”或键是完全限定的文件名 我还创建了一个ImageList,它使用相同的键加载这些文件的缩略图。我已将此ImageList指定为ListView的“SmallImageList”属性 添加和删除文件时,我会通过键从ListView.Items和ImageList.Images集合中添加和删除文件 加载许多图像时,所有这些都可以正常工作。但是,当我尝试删除给定的键时,ListView控件不再正确显示缩

我正在使用ListView加载和显示图像文件的缩略图。我为每个ListViewItem使用的“名称”或键是完全限定的文件名

我还创建了一个ImageList,它使用相同的键加载这些文件的缩略图。我已将此ImageList指定为ListView的“SmallImageList”属性

添加和删除文件时,我会通过键从ListView.Items和ImageList.Images集合中添加和删除文件

加载许多图像时,所有这些都可以正常工作。但是,当我尝试删除给定的键时,ListView控件不再正确显示缩略图

删除项目之前和之后:

在调试期间,当我分析内存中的两个集合数组时,键排列得非常整齐

使用的代码:

// Add the images from an array of paths
foreach (string xFile in files)
{
    thumbnails_imageList.Images.Add(xFile, images[xFile]);
    files_lst.Items.Add(xFile, Path.GetFileNameWithoutExtension(xFile), xFile);
}

// Delete the selected key(s)
foreach (ListViewItem xItem in files_lst.SelectedItems)
{
    files_lst.Items.Remove(xItem);
    thumbnails_imageList.Images.RemoveByKey(xItem.Name);
}

发生的情况很清楚,如果将
ListViewItem
绑定到图像索引
5
并删除位置
4
中的图像,则5向下移动到4,并且该项保留对
5
的引用,因此不显示任何图像


我认为,在删除选定的ListView项目时,不应该从
ImageList
中删除图像。

如果将
ListViewItem
绑定到图像索引
5
,并删除位置
4
中的图像,则发生的情况很清楚,5向下移动到4,项目保留对
5
的引用,因此不显示任何图像


我认为当您删除选定的ListView项时,您不应该从
ImageList
中删除图像。

我刚刚完成了将代码转换为基于索引的键的过程,我也遇到了同样的问题。为了解决这个问题,您可以删除图像,并且仍然保持项目指向正确的索引,我刚刚完成了转换编码到一个基于索引的键,我得到了同样的问题。对于一个解决方案,让你删除图像,仍然保持项目指向正确的索引,这不会严重泄漏内存吗?如果您从未从列表中删除图像,并且不断地反复运行代码,那么最终将得到一个巨大的图像列表,其中大多数图像从未使用过。你将如何解决这个问题?对于一个让你删除图像并保持项目指向正确索引的解决方案,这不会严重泄漏内存吗?如果您从未从列表中删除图像,并且不断地反复运行代码,那么最终将得到一个巨大的图像列表,其中大多数图像从未使用过。您将如何解决这个问题?对于一个解决方案,您可以删除图像,并保持项目指向正确的索引