public partial class Form1 : Form
{
Thread t;
private static int progress;
public Form1()
{
InitializeComponent();
this.progressBar1.Minimum = 0;
this.progressBar1.Maximum = 2000;
t = new Thread(new ThreadStart(AddingControls));
}
void AddingControls()
{
Button [] ctrs = new Button[2000];
for (int i = 0; i < ctrs.Length;i++ )
{
ctrs[i] = new Button();
ctrs[i].Text = i.ToString();
ctrs[i].Location = new Point(0, i * 20);
ctrs[i].Name = "aaa";
progress = i;
if (this.InvokeRequired)
{
this.Invoke(new AddControlToPanelDelegate(AddControlToPanel), new object[] { ctrs[i] });
}
}
}
public delegate void AddControlToPanelDelegate(Control ctr);
void AddControlToPanel(Control ctr)
{
this.panel1.Controls.Add(ctr);
this.progressBar1.Value = progress;
}
private void button1_Click(object sender, EventArgs e)
{
t.Start();
}
}
线程池
为什么说WinForm的控件只能在主线程中创建和调