Что касается программного проекта , над которым я сейчас работаю .
У меня есть следующие методы, которые в основном перемещают холст с помощью таймера:
DispatcherTimer dt = new DispatcherTimer(); //global
public void Ahead(int pix)
{
var movx = 0;
var movy = 0;
dt.Interval = TimeSpan.FromMilliseconds(5);
dt.Tick += new EventHandler((object sender, EventArgs e) =>
{
if (movx >= pix || movy >= pix)
{
dt.Stop();
return;
}
Bot.Body.RenderTransform = new TranslateTransform(movx++, movy++);
});
dt.Start();
}
public void TurnLeft(double deg)
{
var currAngle = 0;
dt.Interval = TimeSpan.FromMilliseconds(5);
dt.Tick += new EventHandler(delegate(object sender, EventArgs e)
{
if (currAngle <= (deg - (deg * 2)))
{
dt.Stop();
}
Bot.Body.RenderTransform = new RotateTransform(currAngle--, BodyCenter.X, BodyCenter.Y);
});
dt.Start();
}
Теперь из другой библиотеки эти методы вызываются так:
public void run()
{
Ahead(200);
TurnLeft(90);
}
Теперь, конечно, я хочу, чтобы эти анимации происходили за другой, но происходит то, что обработчик событий dt.Tick
DispatchTimer
перезаписывается, когда второй метод (в данном случае TurnLeft(90)
) вызывается и, таким образом, только второй метод выполняется как следует.
Мне нужно создать какую-то очередь, которая позволит мне выдвигать и вставлять методы в эту очередь, чтобы dt
(таймер DispatchTimer
) выполнял их один за другим ... в том порядке, в котором они находятся в 'очередь'
Как я могу это сделать? Я на правильном пути или совсем не в курсе?