いくつかのオプション... 1 つを選択するか、それらを組み合わせます。
(1) ロックとカウンターを使用して、イベントが発生したときに次のイメージを順番にロードしていることを保証します。
(2) イベントでタイマーを無効にしTick
、イメージを読み込んだ後に再度有効にします。その結果、最後の画像が描画されてから 500 ミリ秒後に画像が到着するため、画像の読み込みに 1 秒かかる場合、画像は t=1000ms、t=1500ms、t=3000ms などで描画されます。すべての画像が描画されます。画像間で 500 ミリ秒が経過することが保証されていますが、アニメーションが遅く見える場合があります。
(3) 上記を実行しますが、イベントの開始時間を追跡し、画像が描画された後、次のタイマー ティックを 500 - (Now - eventStart)... に設定します。これにより、画像の描画に 250 ミリ秒かかる場合、次のタイマーティックは 250 ミリ秒で起動します。Now - eventStart < 0 の場合、次のタイマー ティックがすぐに開始されます。アニメーションにかかる時間は最小限に抑えられますが、画像が数ミリ秒しか表示されずに点滅する可能性があります。
(4)PictureBox.LoadAsync()
マルチスレッドを提供するために使用します...前のイベントが描画している間に、次のイベントが画像をロードすることができます。ただし、画像がすべて描画されることを保証する必要がある場合は、LoadAsync() を呼び出す前に待機Mutex
するイベントでリリースするが必要です。LoadCompleted
(5) 画像の描画が Layout カテゴリに該当するかどうかはわかりませんが、呼び出しSuspendLayout()
てResumeLayout()
、画像をロードする前/後に試すことができます
(6) 画像の配列を使用し、カウンターをロックし、の.Image
プロパティを使用しPictureBox
て画像を事前にロードできるようにします。これは別の回答でも提案されたと思います
HTH、
ジェームズ