You could wrap the slower parts of the screen updating code between a SuspendLayout() and a ResumeLayout() - that should give a bit of a performance boost.
private void AddFiles(ListView listView, DirectoryInfo directory)
{
listView.Items.Clear();
FileInfo[] Files = directory.GetFiles();
try
{
SuspendLayout();
foreach (FileInfo file in Files)
{
Icon i = ShellIcon.GetSmallIcon(file.FullName);
SmallIconimageList.Images.Add(file.FullName, i);
i = ShellIcon.GetLargeIcon(file.FullName);
LargeIconimageList.Images.Add(file.FullName, i);
listView.Items.Add(file.Name, file.FullName);
}
}
finally
{
ResumeLayout();
}
}
Other than that you could do similar to explorer - load the file names and a dummy icon and then load the icons in a background thread.