我有一个课程,当点击gui的某个部分时
- 创建一个后台工作人员并执行以下操作
- 创建一个新对象(这是一个新的窗体)
- 在它上面调用一个获取一些数据的方法
- 使用该数据填充新窗体gui
问题是表单上有一个gui组件,无法从主程序线程外部创建,如果我尝试我得到错误
Active x ....无法实例化,因为 当前线程不在 单线程公寓。
是否有人可以提供帮助,所以我可以构建这个?
在我的工作中
答案 0 :(得分:2)
不要在后台线程中创建GUI组件。使用后台线程获取和处理数据,然后在 main 线程的UI中呈现它们。我知道这很不方便,因为
但实际上没有办法解决它。 .NET UI组件不是为在后台线程中处理而设计的。
要仅在主线程中执行代码的某些操作,可以使用
someUIControl.Invoke(...)
(WinForms)或Dispatcher.Invoke(...)
(WPF)在BackgroundWorker的DoWork
事件处理程序中。或者,您可以在BackgroundWorker的RunWorkerCompleted
事件处理程序中执行UI操作,该处理程序始终在UI线程中执行。
答案 1 :(得分:0)
UI只应由UI线程管理。
一种可能的解决方案是使用BackgroundWorker
异步加载数据,完成后使用Result
的{{1}}属性将结果传递回UI线程然后显示新表单。