我的代码中出现错误
跨线程操作无效: 从线程访问控制'' 它创建的线程除外 上。
我不知道为什么会这样。有人可以向我解释一下吗?
答案 0 :(得分:2)
这很糟糕,因为您正在从另一个线程访问Windows窗体应用程序中的控件。
您可以分享您的代码吗?
假设您正在访问TextBox
(名称为textBox1
):
textBox1.Text = "Modified text"
您必须这样做,而不是这样做:
MethodInvoker m = () => { textBox1.Text = "Modified text"; };
if (InvokeRequired) {
BeginInvoke(m);
}
else {
m.Invoke();
}
当然,这是一个简单的例子。您可以将Invoking部分封装在方法中,这样就不会一遍又一遍地重复相同的代码。类似的东西:
public void InvokeSafe(MethodInvoker m) {
if (InvokeRequired) {
BeginInvoke(m);
}
else {
m.Invoke();
}
}
所以你所做的就是:
MethodInvoker m = () => { textBox1.Text = "Modified text"; };
InvokeSafe(m);
答案 1 :(得分:0)
常见原因是您尝试从后台线程访问可用于UI线程的数据。确认您没有跨线程访问数据。
您需要发布更多详细信息。
答案 2 :(得分:0)
信息很清楚。跨线程调用可能会使应用程序非常不稳定,这就是它无效的原因。
以下是一些如何解决此问题的文档: