0
私は、forループを使って複数のタイマーを作成し、タイマーは対応するラベルに表示されます。ボタンをクリックすると "n"回、 "n"回作成されます。このコードは実行時のタイムカウントダウンでエラーを示します。各タイマーは異なる間隔で減分されています。この問題を解決するには?C#windowsアプリケーションフォームで複数のカウントダウンタイマーを作成する方法は?
public Dictionary<Timer, Label> dict = new Dictionary<Timer, Label>();
int n = 1;
int timesec = 10;
private void CreateTimers()
{
for (int i = 1; i <= n; i++)
{
Timer timer = new Timer();
timer = new System.Windows.Forms.Timer();
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = (1000);//1 sec
Label label = new Label();
label.Name = "label" + i;
label.Location = new Point(0, 100 + i * 30);
label.TabIndex = i;
label.Visible = true;
this.Controls.Add(label);
dict[timer] = label;
timer.Enabled = true;
timer.Start();
}
private void button2_Click(object sender, EventArgs e)
{
//function call
CreateTimers();
n++;
}
private void timer_Tick(object sender, EventArgs e)
{
//timer countdown
Timer t = (Timer)sender;
timesec--;
if (timesec == 0)
t.Stop();
dict[t].Text = timesec.ToString();
}
あなたは私たちに、エラーメッセージを表示することができます:
はこのようなものは、ダウンカウントを表示するラベルの値を使用してみてください?また、タイマー間で 'timesec'を共有しています。また、複数のタイマーを使用して達成したいことを正確に説明することは、おそらく最良のアイデアではありません。 – gzaxx
* One * Timerのみを使用してください。その唯一の仕事はラベルを更新することです。 Intervalプロパティは重要ではありません.45 msecは十分に高速です。タイミングを開始するときに、各ラベルにDateTime.UtcNow値を格納します。そして、DateTime.Utcからそれを減算して、どれくらいの時間が経過したかを知るために更新します。 –