Quelques options ... choisir un ou les combiner:
(1) Utilisez une serrure et un compteur pour garantir que lorsque l'événement se déclenche son chargement l'image suivante dans la ligne.(2) Désactivez le temporisateur dans l'événement Tick
, puis réactivez-le après avoir chargé l'image. Le résultat est que les images arrivent 500ms après que le dernier est dessiné, donc si une image prend une seconde à charger, les images sont dessinées à t = 1000ms, t = 1500ms, t = 3000ms, etc. Toutes les images sont dessinées, et 500ms est garanti pour passer entre les images, mais l'animation peut sembler lente.
(3) Faites ce qui précède, mais suivez l'heure du début de l'événement, et après que l'image est dessinée, réglez la coche du prochain temporisateur sur 500 - (Now - eventStart) ... de sorte que l'image prenne 250ms pour tirer, la prochaine tique du chronomètre tirera en 250ms. Si Maintenant - eventStart < 0, la prochaine coche du chronomètre devrait se déclencher immédiatement. L'animation prendra le minimum de temps possible, mais les images pourraient potentiellement flasher, apparaissant seulement pendant quelques millisecondes.
(4) Utilisez PictureBox.LoadAsync()
pour vous donner un peu de multithreading ... l'événement suivant peut charger l'image pendant que l'événement précédent dessine. Mais vous aurez besoin d'un Mutex
que vous libérez dans l'événement LoadCompleted
que vous attendez avant d'appeler LoadAsync(), si vous avez besoin de garantir que les images sont toutes dessinées.
(5) Je ne sais pas si le dessin de l'image relève de la catégorie Mise en forme, mais vous pouvez essayer d'appeler SuspendLayout()
et ResumeLayout()
avant/après le chargement de l'image
(6) Utilisez un tableau d'images , verrouillez un compteur et utilisez la propriété .Image
du PictureBox
pour vous permettre de précharger les images. Je crois que cela a été suggéré dans une autre réponse, aussi
HTH,
James
Est-ce que l'un de ces aide de réponse? –