私が現在取り組んでいるソフトウェアプロジェクトを参照してください。
基本的にタイマーでキャンバスを移動する以下のメソッドがあります。
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);
}
もちろん、これらのアニメーションを次々と発生させたいのですが、2 番目のメソッド (この場合は) が呼び出されたときに のdt.Tick
イベント ハンドラーが上書きされているため、2 番目のメソッドのみが実行されます。したほうがいい。DispatchTimer
TurnLeft(90)
dt
メソッドをそのキューにプッシュおよびポップして、 (DispatchTimer
タイマーが)それらを1つずつ実行できるようにするある種のキューを作成する必要があります...「キュー」にある順序で
これを行う方法はありますか?私はここで正しい軌道に乗っていますか、それとも完全にコースから外れていますか?