关于我目前正在开发的软件项目,请参考这个问题。
我有以下方法,基本上是用计时器移动画布:
现在,从另一个库中调用这些方法的方式如下:
当然,我希望这些动画一个接一个地发生,但实际情况是当第二个方法(在这种情况下是
我需要创建某种队列,以便能够将方法推入和弹出到该队列中,以便
我该怎么做?我走对了还是完全偏离了轨道?
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);
}
当然,我希望这些动画一个接一个地发生,但实际情况是当第二个方法(在这种情况下是
TurnLeft(90)
)被调用时,DispatchTimer
的 dt.Tick
事件处理程序被覆盖,因此只有第二个方法按照应该的方式执行。我需要创建某种队列,以便能够将方法推入和弹出到该队列中,以便
dt
(DispatchTimer
计时器)按照它们在“队列”中的顺序一次执行它们。我该怎么做?我走对了还是完全偏离了轨道?