Рисование одного элемента в секунду - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть список, и я хочу перебирать список и рисовать элемент каждую секунду.Я пытаюсь использовать процедуру AddChild элемента canvas.Это своего рода то, что я делаю;Я пытался справиться с фоновым работником и Dispatcher.Invoke, чтобы попытаться решить проблемы с многопоточностью, но безуспешно:

public class MyWindow : Window
{
   protected void OnMouseClick(object sender, MouseEventArgs args)
   {
     List<UIElement> elements = GetElements();

     Canvas canvas = new Canvas();
     this.AddChild(canvas);

     foreach (var k in elements)
     {
        canvas.Children.Add(k);
        Thread.Sleep(1000);
     }
   }
}

Я в основном пытаюсь нарисовать слайд-шоу с фигурами, но оно блокируетсяна этой линии: this.AddChild(canvas).Я, очевидно, что-то делаю не так с потоками, но не могу понять.

Как мне изменить мой код, чтобы каждую секунду отображать одну фигуру в окне.Я хотел бы в конечном итоге очистить предыдущую фигуру, прежде чем рисовать следующую, но это может произойти позже.

1 Ответ

0 голосов
/ 09 февраля 2012

Вы можете использовать BackgroundWorker и Диспетчер :

List<UIElement> elements = GetElements();

Canvas canvas = new Canvas();
this.AddChild(canvas);

var bw = new BackgroundWorker();

bw.DoWork += ( sender, e ) =>
{
  foreach (var k in elements)
  {
     Dispatcher.BeginInvoke( new Action( () => canvas.Children.Add( k ) ) );
     Thread.Sleep( 1000 );
  }
};

bw.RunWorkerAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...