4

我有一些表单需要一些时间才能打开,因为它们目前在 Load 事件处理程序中从数据库中获取一些东西。

是否有可能以某种方式在单独的线程中加载表单并在完成后将它们显示给用户?

如果加载它们以便触发 Load 事件处理程序是不可能的,也许有一个IPreloadable接口可能会用一个Preload方法来解决问题,然后将缓慢加载的内容移入其中。如果可以从一个单独的线程显示表单......我想我需要使用 Invoke 或类似的东西?

4

1 回答 1

2

如果您在不同的线程上加载不同的表单,则在表单之间进行调用时必须非常小心 - 您需要在整个地方使用Control.Invoke/ 。BeginInvoke

请注意,虽然每个顶级窗口都可以在不同的线程上运行,但必须在该窗口的线程上创建窗口内的所有控件(或者更确切地说,必须创建它们的句柄)。

为什么不在后台加载数据库信息,然后当完成,您可以构建实际的表单并显示它?(在此之前,您可能想要更改为等待光标,或者可能在某处放置“正在加载数据...”状态消息。

于 2009-09-07T18:46:26.893 回答