C# 在按钮上设置计时器
我已经动态创建了一些按钮,现在我想一个接一个地显示所有这些按钮。 如何使用延迟功能。我使用thread.sleep循环。但是所有的按钮都会延迟,但我想每个按钮都会延迟。我正在使用C#visual studio 2012C# 在按钮上设置计时器,c#,C#,我已经动态创建了一些按钮,现在我想一个接一个地显示所有这些按钮。 如何使用延迟功能。我使用thread.sleep循环。但是所有的按钮都会延迟,但我想每个按钮都会延迟。我正在使用C#visual studio 2012 for (int i = 0; i < 10; i++) { btn[i] = new Button(); btn[i].Text = i.ToString(); btn[i].Click += Form1_Click;
for (int i = 0; i < 10; i++)
{
btn[i] = new Button();
btn[i].Text = i.ToString();
btn[i].Click += Form1_Click;
this.flowLayoutPanel1.Controls.Add(btn[i]);
System.Threading.Thread.Sleep(1000);
} //closing of code
for(int i=0;i<10;i++)
{
btn[i]=新按钮();
btn[i].Text=i.ToString();
btn[i]。单击+=表格1\u单击;
this.flowLayoutPanel1.Controls.Add(btn[i]);
系统线程线程睡眠(1000);
}//关闭代码
您当前正在阻止UI线程-不要这样做
相反,我建议你使用计时器。例如:
class Foo : Form
{
private int nextButtonToShow = 0;
private Timer timer;
private Button[] buttons;
internal Foo()
{
timer = new Timer();
timer.Tick += ShowNextButton;
timer.Interval = 1000;
timer.Enabled = true;
}
private void ShowNextButton(object sender, EventArgs e)
{
// TODO: Set location etc
Button button = new Button { Text = nextButtonToShow.ToString() };
button.Click += ...;
buttons[i] = button;
Controls.Add(button);
nextButtonToShow++;
if (nextButtonToShow == buttons.Length)
{
timer.Enabled = false;
}
}
}
(您应该确保在处理表单时也处理了计时器。)我会使用Microsoft的反应式框架(在NuGet上查找Rx Main) 不要在主UI线程上使用Thread.Sleep(),否则会阻止窗口中的事件和刷新。使用一个计时器控件代替一个间隔,在计时器的滴答声事件中处理添加一个按钮,在下一个事件中引发下一个按钮,依此类推。
var addButtons =
Observable
.Interval(TimeSpan.FromSeconds(1.0))
.Take(10)
.ObserveOn(SynchronizationContext.Current);
addButtons.Subscribe(i =>
{
btn[i] = new Button();
btn[i].Text = i.ToString();
btn[i].Click += Form1_Click;
this.flowLayoutPanel1.Controls.Add(btn[i]);
});