私はC#とWPFを初めて使用します。私は次のことをしたい:
正確に5秒後に、いくつかのラベルを次々に表示します。
上記を終えた後、キャンバス上で図形を約10回移動し、各移動の間に5秒のタイムギャップを設定する必要があります。
上記を実行しますが、わずか2秒の時間差があります。
コードは次のとおりです。
DispatcherTimer timer2 = new DispatcherTimer();
float timerTime = 10;
Label timerlabel = new Label();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
lbl.Content = "test";
startDisplay("hello!!");
startDisplay("bye");
Shapemove(1);
}
private void startDisplay(string st)
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(5);
timer.Start();
timer.Tick += (s, e) =>
{
lbl.Content = st;
};
}
private void Shapemove(int i)
{
timer2.Interval = new TimeSpan(0, 0, 2);
timer2.Tick += new EventHandler(timer2_Tick);
timer2.Start();
}
void timer2_Tick(object sender, EventArgs e)
{
Random rand = new Random();
if (timerTime > 0)
{
canvas1.Children.Remove(timerlabel);
timerTime--;
canvas1.Children.Add(timerlabel);
timerlabel.FontSize = 20;
timerlabel.Content = timerTime + "s";
Canvas.SetLeft(rectangle1, rand.Next(640));
Canvas.SetTop(rectangle1, rand.Next(480));
}
else
{
timer2.Stop();
}
}
しかし、上記の問題は次のとおりです。
timerとtimer2の両方が同時に開始しました。
ラベルが次々と表示されない-テストが表示され、5秒後にさようならが表示されます。こんにちはは表示されません!!
上記のShapemoveやstartDisplay関数のように、タイマーをリセットして関数として繰り返し呼び出す方法はありますか?
上記の問題の解決にご協力ください。