【问题标题】:How can I make a form's controls not load until at least the frame of the form has been displayed?在至少显示表单的框架之前,如何使表单的控件不加载?
【发布时间】:2012-11-26 04:51:12
【问题描述】:

我有一个 C# Winforms 表单,其中包含大量自定义控件,加载大约需要 10 秒。现在,当我单击菜单项打开我的表单时,菜单会冻结 10 秒,然后表单就会弹出准备就绪。我想做的是:一旦您单击适当的菜单项打开我的表单,我想立即显示该表单,但可能只有红色背景且没有控件。然后表单可以开始尝试加载我的所有控件。这样用户就会看到他们的鼠标点击打开了新表单,并且看起来整个应用程序都没有冻结。将其移至新线程不是一种选择。

【问题讨论】:

  • 您可以加载一个带有动画的“加载”表单,让人们知道它正在加载,然后从该表单加载您的表单。
  • 您说“不能将其移至新线程”。这是真的,因为您只能有一个 Ui 线程,但您的代码中是否还有其他限制阻止使用后台线程?
  • 在这种情况下,已经有一种非常好的方法可以提供适当的反馈。它是单线:Cursor.Current = Cursors.WaitCursor;

标签: c# winforms controls


【解决方案1】:

您是否尝试过将用户控件放在单独的用户控件中,然后在 Shown 事件中对其进行实例化,然后将其添加到表单中。

即像这样的

Form1

public partial class Form1 : Form
{
    UserControl1 usr;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        usr = new UserControl1();
        usr.Dock = DockStyle.Fill;
        panel1.Controls.Add(usr);
    }
}

用户控制1

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        System.Threading.Thread.Sleep(10000);
        InitializeComponent();

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2015-01-23
    • 2016-10-25
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多