我已经尝试了2天才能做到这一点。我已经查看了大量的stackoverflow答案并尝试了所有这些答案,我仍然遇到同样的问题。
我在Windows窗体上有一个标签。此窗体上唯一的代码是:
var thread1 = new Thread(new ThreadStart(Censored.Signup));
thread1.Start();
现在,在Windows窗体上我也有一个标签。它的名字是“createdLabel”
在一分钟前我谈过的thread1(Censored.Signup)中,我有以下代码(与其他代码实际构成程序,无关):
int created = 0;
for (int i = 0; i < 10; i++)
{
created++;
createdLabel.Text = (string.Format("Created: [{0}]", created));
}
我想要的是使用工作线程(Censored.Signup)中的信息(已创建)更新标签(在表单上创建的标签)。
例如(“&gt;”表示接下来/之后发生的事情):
label1 = 0&gt; Censored.Signup中的循环遍历并更新表单上的标签&gt; label1 = 1
我试图将其作为“像我5岁的解释”尽可能地尝试并且非常清楚,但是如果有人感到困惑并且需要清理任何东西,请告诉我。任何帮助将不胜感激。谢谢!
答案 0 :(得分:4)
标签的内容只能从UI线程更改。使用Invoke
方法在具有正确文本的UI线程上执行回调
string text = string.Format("Created: [{0}]", created);
createdLabel.Invoke((Action)delegate { createdLabel.Text = text; });