Если вы в порядке с вызовом Application.DoEvents, и это работает, то это, безусловно, один из подходов. Однако, по моему опыту, Application.DoEvents - это всегда взлом и редко хорошая идея.
Моя первая мысль: возможно, вы сможете создать фоновый поток, который генерирует ваши изображения. Начните свою тему и покажите свой модальный диалог. Для вашего потока после того, как он создал определенное количество (например, 5, 10, 20, 50 и т. Д.), Он вызвал бы диспетчер событий и выполнил метод, который обновляет ListView с новым пакетом изображений. Поскольку он вызывался только периодически, это дало бы Модальному диалогу время для обработки собственных сообщений. Функция, которую вы вызываете в диспетчере событий, получит список изображений, вызовет ListView.BeginUpdate (), пройдется по списку, создаст и добавит элементы, затем вызовет ListView.EndUpdate ()
Есть и другие способы сделать это, но я бы действительно старался избегать Application.DoEvents () (что, по моему опыту, является хаком от программистов на Visual Basic, которые не понимали многопоточность).