.NET里工作线程和界面的线程(主线程)不能通过一般方式交互, 是为了安全。
那另外有两个方法实现工作线程和界面的线程(主线程)交互!
方法一是用Invoke或者 BeginInvoke
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Thread th = new Thread(new ThreadStart(addControl));
th.Start();
}
delegate void delagateAddctl();
void addControl() {
if (this.InvokeRequired ){
this.Invoke(new delagateAddctl(addControl2));
return;
}
MessageBox.Show("直接调用");
for (int i = 0; i < 10;i++ )
{
Button bt = new Button();
bt.Size = new Size(22, 22);
bt.Left =22*i;
this.Controls.Add(bt);
}
}
void addControl2()
{
MessageBox.Show("间接调用");
for (int i = 0; i <10; i++)
{
Button bt = new Button();
bt.Size = new Size(22, 22);
bt.Left = 22 * i;
this.Controls.Add(bt);
}
}
方法2(.netFramework2.0)
用BackgroundWorker组件
方法略