作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于标签页的应用程序。为了减少启动时间,我只创建了向用户显示的标签页。
启动表单后,我使用 BackgroundWorker 创建其他标签页。标签页包含带有数据绑定(bind)的用户控件。
它工作正常。问题是:在一个标签页中,我遇到了跨线程冲突。那个标签页也有数据绑定(bind)。
那么在这种情况下会出现什么问题呢?
谢谢是提前。
最佳答案
WinForms 控件具有线程关联性。这意味着它们应该在创建它们的同一主题上访问。这是因为 WinForms 实际上只是 Win32 功能的包装器,并且在 Win32 中管理窗口和子控件的代码不是线程安全的。因此,您的 Form 和子控件只能在创建它们的同一线程上访问。
在您的情况下,您不应该使用 BackgroundWorker 线程或除主线程之外的任何其他线程创建 TabPage 实例,这是我假设您拥有包含要添加页面的 TabControl 的主窗体的位置。
通常,开发人员很幸运并设法在创建它们的不同线程中使用控件并且它不会崩溃。但这只是纯粹的运气,迟早会开始失败。
关于winforms - 在 Winform 中将 UserControl 从工作线程添加到主 UI 线程时发生跨线程冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912151/
我是一名优秀的程序员,十分优秀!