アニメーションのCanvasに多くのピクセルを描画するこのアルゴリズムがあります。しかし、私はアニメーションの速度を制御することはできませんし、非常に高速描画しているので、私はThread.Sleep(1)を追加しましたが、 私はストーリーボードのアプローチを試みましたが、それは非常に遅くなってしまいました。Thread.Sleep(1); Silverlightアニメーションでは遅すぎるのですが、代替方法はありますか?
ループの速度を落とすためのThread.sleepの代替手段がありますか?
void DrawGasket(object sender, DoWorkEventArgs e)
{
Random rnd = new Random();
Color color = Colors.White;
while (Counter <= noOfPx)
{
switch (rnd.Next(3))
{
case 0:
m_lastPoint.X = (m_top.X + m_lastPoint.X)/2;
m_lastPoint.Y = (m_top.Y + m_lastPoint.Y)/2;
color = Colors.White;
break;
case 1:
m_lastPoint.X = (m_left.X + m_lastPoint.X)/2;
m_lastPoint.Y = (m_left.Y + m_lastPoint.Y)/2;
color = Colors.Orange;
break;
case 2:
m_lastPoint.X = (m_right.X + m_lastPoint.X)/2;
m_lastPoint.Y = (m_right.Y + m_lastPoint.Y)/2;
color = Colors.Purple;
break;
}
Dispatcher.BeginInvoke(() =>
{
var px = new Rectangle {
Height = m_pxSize,
Width = m_pxSize,
Fill = new SolidColorBrush(color)
};
Canvas.SetTop(px, m_lastPoint.Y);
Canvas.SetLeft(px, m_lastPoint.X);
can.Children.Add(px);
lblCounter.Text = Counter.ToString();
});
Counter++;
Thread.Sleep(1);
}
}
Doh ...シンプルな方が優れていました。 – Qwark