【发布时间】:2011-12-06 23:00:19
【问题描述】:
这是我正在尝试做的一个简化示例:
我有 2 个控件 MyControl c 和 Panel p。 p 像往常一样在主 GUI 线程中创建,但我希望在后台线程中创建 c,因为它需要一段时间而且我不想冻结 GUI。如何将c 添加到p.Controls?如果我在this.Invoke 中执行此操作,则会为c 引发异常,如果我从后台线程执行此操作,则会为p 引发异常。
还是我真的不应该在主 GUI 线程之外创建 GUI 元素?
【问题讨论】:
-
或者我真的不应该在主 GUI 线程之外创建 GUI 元素? - 通常。您真的需要在另一个线程中创建控件吗?为什么仅仅创建它就如此昂贵?难道你不能廉价地创建控件并使用后台线程来加载数据或做任何你需要做的事情吗?
-
如果可能的话,在不同的线程上创建控件会让人头疼。在 UI 线程上创建它们。使用 p.Invoke() 调用创建 c 的方法。
-
不幸的是,这是一个封闭源代码的第 3 方控件。我想我去看看,看看能不能把慢的部分分离出来。
标签: c# .net multithreading invoke