如何在显示表单UI之前加载它?

时间:2018-07-15 01:58:15

标签: c# winforms windows-forms-designer

早上好,我有一个包含大量可视控件的表单,因此加载所有窗口都需要一段时间,我认为如果表单UI加载而不显示它并且UI加载所有控件会更好一些,然后显示它,使用户看不到控件的加载。

3 个答案:

答案 0 :(得分:0)

如果该表单是您的启动表单,请考虑使用启动画面。

否则,首先尝试查找需要花费一些时间来加载的控件,也许您正在填充列表,获取外部数据...在这种情况下,请使那些初始化异步。

如果只想在加载时使表单不可见,为什么不将表单可见性设置为隐藏并在表单加载事件中显示呢?

答案 1 :(得分:0)

在进行其他处理之前,如何使Winform(及其所有子控件)完全呈现: Immediate display of WinForms using the Shown() event

答案 2 :(得分:0)

通常不是导致此问题的表单上控件的数量,而是在显示表单时通过一种耗时的方法将它们装入值。
因此,您需要完整显示表单,然后才能开始加载数据。

有两种方法可以执行此操作。

  1. Application.DoEvents():事件中致电FormShown
  2. This.Update();事件中致电Activated

对于第二种解决方案,您需要声明一个bool变量以用作标志,这样就不必每次都这样做

private bool _firstTime = true;

private void Form1_Activated(object sender, EventArgs e)
{
   if (_firstTime)
   { 
       _firstTime = false;
       this.Update();
       FetchDataAndOtherTimeSpendingStuffNow();
   }
}

在两种情况下,请确保仅在完成此操作后才开始加载数据和其他耗时的代码。
这将确保您的表单显示有所有控件,然后才开始使用数据填充控件。