title: Thread.Sleep(1); is too slow for a Silverlight animation, is there an alternative?
body: <p>I have this algorithm that are drawing a lot of pixels on a Canvas in an animation. But I have no control of the speed of the animation and it is drawing very fast, so I added a Thread.Sleep(1) but then it is too slow when drawing several thousand pixels.
  I have tried a Storyboard approach but that ended up to be a very slow.</p>
  
  <p>So are there an alternative to the Thread.sleep for slowing down my loop?</p>
  
  <pre><code>void DrawGasket(object sender, DoWorkEventArgs e)
      {
          Random rnd = new Random();
          Color color = Colors.White;
          while (Counter &lt;= 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(() =&gt;
              {
                  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);
          }
      }
  </code></pre>