C# VB.NET-线程+调用不会向窗体中添加控件

C# VB.NET-线程+调用不会向窗体中添加控件,c#,vb.net,multithreading,C#,Vb.net,Multithreading,我有个问题。我有多个线程。每个线程应创建一个新的选项卡页。此选项卡页应包含webbrowser元素。元素还没有出现。应在最多20个单螺纹启动后生成 所以,我想我一切都对了。我有一些线程,它们将委托称为STA线程,在处理线程并添加控件之后,一切都正常,我不会出错。但每次添加包括浏览器在内的选项卡页面时,表单都不会发生任何更改。没有错误,但表单上也没有显示任何内容 我做错了什么 这是电话 frmMain.navigateBrowser("http://example.com") 然后,在navig

我有个问题。我有多个线程。每个线程应创建一个新的选项卡页。此选项卡页应包含webbrowser元素。元素还没有出现。应在最多20个单螺纹启动后生成

所以,我想我一切都对了。我有一些线程,它们将委托称为STA线程,在处理线程并添加控件之后,一切都正常,我不会出错。但每次添加包括浏览器在内的选项卡页面时,表单都不会发生任何更改。没有错误,但表单上也没有显示任何内容

我做错了什么

这是电话

frmMain.navigateBrowser("http://example.com")
然后,在navigateBrowser函数中,我将生成一些元素,最后将这些元素添加到表单中

tcMain.TabPages.Add(tmpTab)
我以前把它放在计时器里,在一个类上运行,这样就可以保存命令了!现在导航!但是这个方法太慢了,现在我想直接通过调用来尝试它


就这样,希望你能帮助我:

你只能在UI线程上创建控件。您不能使用其他线程进行此操作。由于在调用Navigate时WebBrowser正在实现异步进程,因此不需要使用多线程。只需使用WebBrowser创建选项卡,并按顺序为每个浏览器调用navigate。每个浏览器将并行加载来自不同URL的页面。通常的VB.NET问题肯定已经有数百个关于它的问题了。frmMain是一个类型名,而不是对象引用。在工作线程中使用它时,将创建frmMain类型的新对象。它不可见,从未调用过它的Show方法。并且无法工作,线程从未调用Application.Run。还有当你有一个工作线程添加一个控件时,你没有得到异常的原因。好的,谢谢你提供的信息。但是,问题是应用程序被卡住了,因为最多可以有20个浏览器。如果我同时为所有的webbrowser调用navigate,应用程序会非常慢,而且我不能在任何地方单击,甚至连tabpages都不能。我尝试在单个Web浏览器的导航事件中运行一些Application.update。但这不起作用,那么有什么解决方案可以让应用程序不会卡住呢?