【发布时间】:2010-06-01 23:36:02
【问题描述】:
我正在使用一个 winforms 控件,它既是一个 GUI 元素,也执行一些尚未向开发人员公开的内部处理。当这个组件被实例化时,它可能需要 5 到 15 秒才能准备好,所以我想做的是把它放在另一个线程上,当它完成后把它带回 gui 线程并将它放在我的表单上。问题是这将(并且已经)导致跨线程异常。
通常,当我使用工作线程时,它只使用简单的数据对象,我可以在处理完成后推回,然后使用主线程上已经存在的控件,但我从来不需要以这种方式移动整个控件。
有谁知道这是否可行,如果可以,怎么办?如果不是,如何处理这样一个有可能锁定主 gui 的问题?
【问题讨论】:
-
除了控件本身之外,初始化工作是否可以分离到自己的线程中?
-
你好罗伯特很遗憾不是。
-
如何中断对“ControlContext”的初始化,在线程中初始化上下文并将其发送回控件,实际上是从 Context.Properties 设置 Control.Properties?
-
您好 Patrick,不幸的是,初始化与控件紧密耦合。
-
(你可以通过一些反射和非常讨厌不安全的代码来解决这个问题,但我每次看到它都会哭泣,而且我肯定不会想要任何人将该代码归还给我。)
标签: c# winforms multithreading