【发布时间】:2018-03-15 15:39:16
【问题描述】:
我想从非 UI 线程中的另一个类更新 UI。
但是我不能直接在Test类中调用“BeginInvoke”。
如何解决...
private void Form1_Load(object sender, EventArgs e)
{
Task.Run(() =>
{
Test.Set(textBox1);
});
}
public class Test
{
public static void Set(TextBox textBox)
{
// ↓Exception...
textBox.Text = "ABCD";
}
}
【问题讨论】:
-
表单应该负责更新自己的 UI。它不应该像那样在外部公开其私人控制。此外,在使用 TPL 时,您根本不应该使用
invoke(至少在典型情况下)。您应该依靠等待任务安排继续在 UI 线程上运行以处理所有 UI 编组的事实。 -
除了@Servy 所说的,您能否解释一下为什么“不能在测试类中直接调用
BeginInvoke”(假设您在谈论Control.BeginInvoke) -
“正确提出的问题是解决了一半的问题”-请在发布前记住这一点:)
-
他们都在同一个班级吗? is
Test嵌套类? -
@ChiaHsien 这样做只会导致您遇到更多问题。您不想尝试弄清楚如何从没有业务编辑 UI 对象的类中调用
Invoke。
标签: c# ui-thread begininvoke