c# - 从非 UI 线程更新 Windows 窗体上的标签?

标签 c# multithreading winforms forms

我已经尝试了两天来做到这一点。我查看了大量的 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/

相关文章:

c# - 无法在 C# MVC 中返回具有不同参数的 View() - Ajax 问题更新页面内容

加法运算的 C++ 线程安全

c# - 如何将winform的自动滚动定位在顶部?

c# - 数据 GridView 中的多行列。使用 C#

c# - 如何在特定时间以毫秒精度触发 C# 函数?

c# - 如何避免重复的 try catch block

c# - 如何在 WPF 上使用 ICommand 的 CanExecute 方法

c# - Arg.Do() 在 When..Do for void 方法中预期时未触发

java - 使线程在 Java 中以特定顺序启动

java - 如何在多个线程中执行 Spring 集成流程以并行使用更多 Amazon SQS 队列消息?