WinForm控件上的跨线程操作

时间:2010-09-08 12:44:40

标签: vb.net winforms multithreading

这是我的代码方案,

在主线程中我创建了面板(基于某些配置),然后在下一步基于文件类型(如视频,ppt,图像......)我创建适当的控件(动态)来显示在表格上。

控件的创建将在单独的线程中完成(对于每个文件)。创建控件后,当我尝试将该控件添加到面板(在主线程中创建)时会抛出错误,类似于cross thread violation, control was accessed from one thread other that it was created

有人可以在这方面帮助我吗?

在这种情况下,创建面板和控件的所有内容都将是动态的。什么都不会是静止的。

我尝试了StackOverflow上的一些文章(例如,control.BeginInvoke()等),但无法解决我的问题。

2 个答案:

答案 0 :(得分:4)

您无法在另一个线程中创建控件,并将它们添加到在主UI线程中创建的表单中。 Windows要求顶级窗口拥有的子窗口属于同一个线程。您在UI线程中创建它们。利用Control.Begin / Invoke()方法。

答案 1 :(得分:0)

只应从主GUI线程创建和访问控件。

您可以在其他线程中工作,但不要从其他线程访问GUI组件。