线程间操作无效: 从不是创建控件“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的状态,如果有多个不同主线程要获取子线程状态,怎么办?