C# Вывод элемента списка с задержкой таймера
Я пытаюсь в Label вывести словарь, в котором ключ- то, что надо вывести, а значение - задержка таймера. У меня получилось добиться желаемого результата через async метод и строки в цикле await Task.Delay(el.Value);, но он неправильно работает, если на кнопку нажать несколько раз, поэтому я переписываю метод, используя Timer WinForms. В timer_tick методе я уже пытался хоть что-то вывести, но у меня не получается добиться того же результата, как с асинхронным методом
private void button2_Click(object sender, EventArgs e)
{
label1.Text = "";
timer1.Start();
var chosen_action = ac.actions[comboBox1.SelectedItem + ""];
foreach (var el in chosen_action)
{
label1.Text += $"{el.Key} ";
//await Task.Delay(el.Value);
// Для обновления интервала таймера
timer1.Stop();
timer1.Interval = el.Value;
timer1.Start();
}
//timer1.Stop();
//timer1.
//timer.Interval = el.Value;
//timer.AutoReset = false;
//timer.Elapsed += Timer_Elapsed;
//timer.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
//label1.Text += "# ";
//var chosen_action = ac.actions[comboBox1.SelectedItem + ""];
//foreach (var el in chosen_action)
//{
// label1.Text += $"{el.Key} ";
// //timer1.Stop();
// timer1.Interval = el.Value;
// //timer1.Start();
//}
//timer1.Stop();
}
}
Ответы (1 шт):
Автор решения: Виктор
→ Ссылка
Используйте такой приём:
private void button2_Click(object sender, EventArgs e)
{
button2.Enabled = false; // Не даём нажимать кнопку, пока не отработали
...
button2.Enabled = true;
}
Более общее решение:
Button btn = (Button)sender;
btn.Enabled = true;