Несколько вариантов ... выберите один или объедините их:
(1) Используйте блокировку и счетчик, чтобы гарантировать, что при запуске события загружается следующее изображение в строке.
(2) Отключите таймер в событии Tick
, затем снова включите его после загрузки изображения.В результате изображения поступают через 500 мс после прорисовки последнего, поэтому, если загрузка изображения занимает одну секунду, изображения отрисовываются при t = 1000 мс, t = 1500 мс, t = 3000 мс и т. Д. Все изображения отрисовываются,и 500 мс гарантированно проходят между изображениями, но анимация может отображаться медленно.
(3) Выполните вышеописанное, но отследите время начала события, и после того, как изображение нарисовано, установите следующий таймер набыть 500 - (сейчас - eventStart) ... так что если для рисования изображения требуется 250 мс, следующий таймер срабатывает через 250 мс.Если сейчас - eventStart <0, следующий тик таймера должен срабатывать немедленно.Анимация займет минимально возможное количество времени, но изображения могут потенциально мигать, появляясь только в течение нескольких миллисекунд. </p>
(4) Используйте PictureBox.LoadAsync()
, чтобы дать вам многопоточность ... следующийСобытие может загружать изображение во время рисования предыдущего события.Но вам понадобится Mutex
, который вы выпускаете в событии LoadCompleted
, которое вы ждете перед вызовом LoadAsync (), если вам нужно гарантировать, что все изображения прорисованы.
(5) I 'Я не уверен, попадает ли рисунок в категорию «Макет», но вы можете попробовать позвонить SuspendLayout()
и ResumeLayout()
до / после загрузки изображения
(6) Использовать массив изображений, заблокироватьcounter и используйте свойство .Image
PictureBox
, чтобы позволить вам предварительно загружать изображения.Я полагаю, что это было предложено в другом ответе, также
HTH,Джеймс