C# 在非UI线程中从另一个类更新UI
我想在非UI线程中从另一个类更新UI 但我不能直接在测试类中调用“BeginInvoke” 如何解决它C# 在非UI线程中从另一个类更新UI,c#,ui-thread,begininvoke,C#,Ui Thread,Begininvoke,我想在非UI线程中从另一个类更新UI 但我不能直接在测试类中调用“BeginInvoke” 如何解决它 private void Form1_Load(object sender, EventArgs e) { Task.Run(() => { Test.Set(textBox1); }); } public class Test { public static void Set(TextBox textBox) {
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";
}
}
根据阿列克谢列文科夫的回答 我修改了我的代码,如下所示,它工作得很好
public static void Set(TextBox textBox, string text)
{
textBox.BeginInvoke(new Action(() => { textBox.Text = text; }));
}
表单应该负责更新自己的UI。它不应该像那样对外公开其私人控制。此外,在使用TPL时,您根本不应该使用
invoke
(至少在典型情况下)。您应该相信这样一个事实:等待任务会安排继续在UI线程上运行,以处理所有UI封送。除了@Servy所说的之外,您能否澄清为什么“不能直接在测试类中调用BeginInvoke
”(假设您正在谈论)“一个恰当的问题是解决了一半的问题“-发帖前请记住:)他们两人在同一个班级吗?Test
是嵌套类吗?@chiahien这样做只会让你遇到更多的问题。您不想尝试找出如何从没有业务编辑UI对象的类调用Invoke
。