我已经动态创建了一些按钮,我想逐个显示所有这些按钮。 我怎么能使用延迟功能。我在循环中使用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;
this.flowLayoutPanel1.Controls.Add(btn[i]);
System.Threading.Thread.Sleep(1000);
} //closing of code
答案 0 :(得分:3)
您目前正在阻止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;
}
}
}
(您应确保在处理表格时丢弃计时器。)
答案 1 :(得分:1)
我会使用微软的反应框架(在NuGet上寻找Rx-Main)。
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]);
});