2010-03-08 56 views
1

我有一个需要几秒钟加载的用户控件。有没有办法在表单加载时预加载控件?预加载用户控件

+0

您是否在运行时实例化并将此用户控件添加到窗体? – 2010-03-08 16:28:43

回答

0

不要在UserControl的构造函数或Load事件中做一堆工作,而是在工作线程中执行它。 BackgroundWorker对此很有帮助。这将使您可以快速启动表单,但不一定能快速获得用户界面。考虑一个启动画面。

+0

我喜欢闪屏的想法。可用性比慢一点的应用加载时间更可接受。感谢闪屏的想法,我从来没有想过它。 – 2010-03-08 17:26:15

0

您是否拥有UserControl的源代码?如果是这样,我会开始尝试优化UserControl。听起来像UC在启动时创建了太多的UI对象。预加载不会随时为您节省。 WinForms UI是单线程的,因此几秒钟的加载时间将被移动到应用程序的启动。我不知道你是否创建了UC的多个实例。如果是这样,您可能可以重复使用单个实例来避免创建费用。

+0

我有权访问源,并且只使用它的一个实例。说实话,将控件的加载时间移至应用程序启动时间是可以接受的答案。然后,我会使用启动屏幕,如“加载组件”或类似的东西,如nobugz建议的那样。 – 2010-03-08 17:25:56

0

首先,使用分析器确定实际造成放缓的因素。然后,如果合适,您可以尝试优化代码以使其更快(达到可接受的水平),或者将独立代码(如数据访问)重构为独立点,以便可以执行它与用户控件加载异步。这就是你可以做的所有事情,因为用户控件必须与UI相同的线程加载。

+0

在这个阶段没有数据访问这个控件。在用户按下“填充”按钮之前,它只有几个标签和一个文本框,它们具有空的文本字段。我将会看到什么会放慢速度,但是一定会晚一点,因为我有最后期限,必须完成'功能'。 – 2010-03-08 17:31:22