Winforms 在Winform中将UserControl从工作线程添加到主UI线程时发生跨线程冲突

Winforms 在Winform中将UserControl从工作线程添加到主UI线程时发生跨线程冲突,winforms,multithreading,Winforms,Multithreading,我有一个基于标签页的应用程序。为了减少启动时间,我只创建显示给用户的选项卡页面 启动表单后,我使用BackgroundWorker创建其他选项卡页面。选项卡页包含带有数据绑定的用户控件 它工作得很好。问题是:有一个标签页,我得到了跨线程违规。那个标签页也有数据绑定 那么,在这种情况下会出现什么问题呢 感谢您的帮助。WinForms控件具有线程关联性。这意味着它们应该在创建它们的同一个thead上访问。这是因为WinForms实际上只是Win32功能的包装器,在Win32中管理windows和子控

我有一个基于标签页的应用程序。为了减少启动时间,我只创建显示给用户的选项卡页面

启动表单后,我使用BackgroundWorker创建其他选项卡页面。选项卡页包含带有数据绑定的用户控件

它工作得很好。问题是:有一个标签页,我得到了跨线程违规。那个标签页也有数据绑定

那么,在这种情况下会出现什么问题呢


感谢您的帮助。

WinForms控件具有线程关联性。这意味着它们应该在创建它们的同一个thead上访问。这是因为WinForms实际上只是Win32功能的包装器,在Win32中管理windows和子控件的代码不是线程安全的。因此,窗体和子控件只能在创建它们的同一线程上访问

在您的情况下,您不应该使用BackgroundWorker线程或除主线程之外的任何其他线程来创建TabPage实例,我假设您的主窗体包含要添加页面的TabControl


开发人员通常很幸运,能够在创建控件的不同线程中使用控件,并且不会崩溃。但这纯粹是运气,迟早会失败。

如果是这样,如何在我的应用程序中提高性能。为了减少启动时间,我在不同的线程中创建usercontrol,并在主线程中添加。如果这纯粹是运气,那么如何在不使用BackgroundWorker的情况下提高性能呢?创建TabPage不会成为性能问题。您可以非常快速地创建带有一些控件的页面。您需要了解真正的性能瓶颈。您正在加载的是数据吗?可以使之异步的同步操作?