在C#中使跨线程操作无效

可能重复:
跨线程操作无效:从创建它的线程以外的线程访问控制

我正在编写一些代码,我初始化一个对象(在这种情况下是一个表单),然后空闲,直到它收到某人的消息,或者直接调用其中一个方法。

在我的表单中,我有一个列表框(lTester),显示对此表单的所有调用。 在运行期间,我收到以下错误:

跨线程操作无效:控制’lTester’从其创建的线程以外的线程访问。

我没有手动启动任何线程,事实上我从未使用它们,也不知道C#如何在内部管理UI组件。 有没有办法解决这个问题?

如果你想知道你的线程来自哪里,你可以在你知道被调用的方法中放置一个断点(产生错误的地方),打开VS中的线程和堆栈跟踪窗口,看看启动调用的是什么首先。

即使代码位于Form类中,调用者仍然会决定执行调用的线程。这就是为什么,正如Oskar所说,你必须检查是否需要Invoke主线程。 有很多关于如何做到这一点的例子,只有Google InvokeRequired并从那里开始。

如果您需要一个例子,请告诉我。

在触摸ITester之前,您必须检查InvokeRequired的值。 如果为true,则调用函数Invoke