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

时间:2010-10-24 21:40:58

标签: c# multithreading exception-handling

  

可能重复:
  Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on

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

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

  

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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