C#多线程问题:线程间操作无效: 从不是创建控件“label4”的线程访问它。_百度知道

多个线程访问同一组件是不安全的,需要使用委托,C#中默认不允许在控件的非创建线程中设置控件的值。可以使用delegate解决。
给个例子吧,比如我要在另一个线程中设置一个TextBox控件的值。调用下面的SetText()就不会抱错了。
private delegate void SetTextDelegate(string value);
private void SetText(string value)
{
if (this.InvokeRequired)
{
SetTextDelegate d = new SetTextDelegate(SetText);
this.Invoke(d);
}
else
{
this.textbox.Text = value;
}
}

把this.textbox.text = value; 改成 this.label4.text = value; 就可以用上面的函数设置你的label4的text了

引文来源  C#多线程问题:线程间操作无效: 从不是创建控件“label4”的线程访问它。_百度知道