这是我的代码方案,
在主线程中我创建了面板(基于某些配置),然后在下一步基于文件类型(如视频,ppt,图像......)我创建适当的控件(动态)来显示在表格上。
控件的创建将在单独的线程中完成(对于每个文件)。创建控件后,当我尝试将该控件添加到面板(在主线程中创建)时会抛出错误,类似于cross thread violation, control was accessed from one thread other that it was created
。
有人可以在这方面帮助我吗?
在这种情况下,创建面板和控件的所有内容都将是动态的。什么都不会是静止的。
我尝试了StackOverflow上的一些文章(例如,control.BeginInvoke()
等),但无法解决我的问题。
答案 0 :(得分:4)
您无法在另一个线程中创建控件,并将它们添加到在主UI线程中创建的表单中。 Windows要求顶级窗口拥有的子窗口属于同一个线程。您有在UI线程中创建它们。利用Control.Begin / Invoke()方法。
答案 1 :(得分:0)
只应从主GUI线程创建和访问控件。
您可以在其他线程中工作,但不要从其他线程访问GUI组件。