投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/9/7 10:04:18
> PictureBox の Invalidate を呼ぶことだけに特化してみてください。
> そして実際の描画処理は、PictureBox の Paint イベントで行わせるようにします。

Invalidate メソッド + Paint イベントを使ったアナログ時計の
具体的なサンプルがあったので紹介しておきますね。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=235

このサンプルでは、背景画像を貼ったとしても、ちらつきが気になることはありませんでしたが、
ちらつきを抑えるために DoubleBuffered プロパティを使っている点が大きいです。
(DoubleBuffered を False にするとちらつきます)
ただしこれは PictureBox ではなく Form に直接描画しているためにおこることです。
PictureBox に描画する場合は最初からダブルバッファリングが有効なので、気にしなくて OK。

ダブルバッファリングの恩恵にあずかるためには、
描画処理を Paint イベントに集約する必要があります。



上記サンプルでは、1 秒ごとに秒針がすすむ時計となっていますが、
1 秒未満も連続的に進めるようにしたい場合は、Timer1.Interval を小さくしたうえで、
Timer1 の Tick イベント内の条件判定を捨てて、『Me.Invalidate()』だけにすれば OK。

あとは秒針のための計算処理を
 Dim secAng As Double = 2.0 * pai * time.Second / 60.0
から
 Dim secAng As Double = 2.0 * pai * (time.Second + time.Millisecond / 1000.0) / 60.0
にすれば、秒針をより細かく動かすことができます。

ついでに、Paint イベントの所で、
 Dim g As Graphics = e.Graphics
の下に
 g.SmoothingMode = SmoothingMode.HighQuality
を入れておくと、描画結果が綺麗になると思います。