我正在编写一些代码,我初始化一个对象(在本例中是一个表单),然后空闲,直到它收到某人的消息,或者直接调用其中一个方法。
在我的表单中,我有一个列表框(lTester),显示对此表单的所有调用。在运行期间,我收到以下错误:
跨线程操作无效: 控制'lTester'从a访问 线程以外的线程 创建于。
我还没有手动启动任何线程,事实上我从未使用它们,也不知道C#如何在内部管理UI组件。有没有办法解决这个问题?
答案 0 :(得分:2)
在您触摸ITester
之前,您必须检查InvokeRequired的值。如果是,请调用函数Invoke
答案 1 :(得分:1)
如果你想知道你的线程来自哪里,你可以在你知道被调用的方法中放置一个断点(产生错误的地方),打开VS中的线程和堆栈跟踪窗口,看看启动了什么电话开始。
即使代码位于Form类中,调用者仍然会决定执行调用的线程。这就是为什么,正如Oskar所说,你必须检查是否需要Invoke
到主线程。有很多关于如何执行此操作的示例,只有Google InvokeRequired
并从那里开始。
如果您需要一个例子,请告诉我。