我已经尝试了两天来做到这一点。我查看了大量的 stackoverflow 答案并尝试了所有答案,但仍然遇到同样的问题。
我在 Windows 窗体上有一个标签。此 Windows 窗体上的唯一代码是:
var thread1 = new Thread(new ThreadStart(Censored.Signup));
thread1.Start();
现在,在 Windows 窗体上我也有一个标签。它的名称是“createdLabel”
在我一分钟前谈到的线程1(Censored.Signup)上,我有以下代码(以及实际组成程序的其他代码,不相关):
int created = 0;
for (int i = 0; i < 10; i++)
{
created++;
createdLabel.Text = (string.Format("Created: [{0}]", created));
}
我想要的只是使用工作线程(Censored.Signup)中的信息(创建)更新标签(表单上的createdLabel)。
例如(“">”代表接下来/之后发生的事情):
label1 = 0 > Censored.Signup 中的循环运行并更新表单上的标签 > label1 = 1
我尝试将其设置为“像我 5 岁一样解释”,以尝试做到真正清晰,但如果有人感到困惑并且需要澄清任何内容,请告诉我。任何帮助将不胜感激。谢谢!
最佳答案
标签的内容只能从 UI 线程更改。使用 Invoke
方法在具有正确文本的 UI 线程上执行回调
string text = string.Format("Created: [{0}]", created);
createdLabel.Invoke((Action)delegate { createdLabel.Text = text; });
关于c# - 从非 UI 线程更新 Windows 窗体上的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20937974/