【问题标题】:Updating UI from Backgroundworker Thread (Invoke) [duplicate]从 Backgroundworker 线程(调用)更新 UI [重复]
【发布时间】:2020-07-20 00:54:21
【问题描述】:

我目前正在尝试从我的 BackgroundWorker 线程更新我的控件 (Label.Text)。

Control1 mycontrol = new Control1();

mycontrol.Invoke((MethodInvoker)delegate { mycontrol.statusmainlabel.Text = "Setting up"; });

但我收到以下错误:

System.InvalidOperationException:“在创建窗口句柄之前,无法调用 Invoke 或 BeginInvoke 进行控制。”

我正在尝试从BackgroundWorker 调用的其他类更新我的UserControl

【问题讨论】:

  • 如果没有重现问题的minimal reproducible example,就无法确定应该如何修复您的代码。但是,请参阅重复的一般建议,以引导您更好地理解措辞清晰的错误消息和修复它的策略。至于您发布的代码,如果您实际上是为了调用Invoke() 而创建Control1 对象,那是错误的。您需要使用表单中已经存在的控件实例。

标签: c# winforms invoke


【解决方案1】:

您需要将您的控件添加到已显示的现有容器控件中。

例如:

Control1 mycontrol = new Control1();
form1.Controls.Add(mycontrol);
//then update it

【讨论】:

  • OP 更有可能一开始就不应该创建新控件。无论如何,由于缺少minimal reproducible example,因此无法知道答案是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多