一切福田,不離方寸,從心而覓,感無不通。

线程间操作无效: 从不是创建控件“label1”的线程访问它

Thread thread=null; //定义线程
 

//开始线程

 

private void button1_Click(object sender, EventArgs e)

 

{

 


thread
= new Thread(new ThreadStart(StartThread));

 


thread
.Start();//开始线程

 

}

 

private void StartThread()

 

{

 


int i = 0;

 


while (true)

 


{

 


this.label1.Text = i.ToString(); //此处报错

 


i
++;

 


}

 

}

 

//结束线程

 

private void button4_Click(object sender, EventArgs e)

 

{

 


thread
.Abort();

 

}

 

问题:当我们运行的时候会出现错误:"线程间操作无效: 从不是创建控件“label1”的线程访问它。"
解决方案:在程序运行的时候增加一句话,如下:
public Form1()
{
InitializeComponent
();
Control
.CheckForIllegalCrossThreadCalls = false; //这是增加的一句话
} 
缺点:将UI传给了子线程,违背了弱耦合、封装的思想。子线程去更新UI的状态,如果有多个不同主线程要获取子线程状态,怎么办?