0

我有一个使用 2 个表单的应用程序,一个主表单和一个启动表单,用于以下配置:

public class MainForm : Form
{
    public MainForm()
    {
       SplashScreen splash = new SplashScreen();

       // configure Splash Screen
    }
}


public class SplashScreen
{
    public SplashScreen()
    {
       InitializeComponent();

       // perform initialization

       this.ShowDialog();
       this.BringToFront();
    }
}

注意:主窗体是使用以下代码创建的:

Application.Run( new MainForm() );

上面的问题是splash的配置不会发生,除非splash被关闭了

splash.Close();

只有当这种情况发生时,MainForm 构造函数的其余部分才会运行。我怎样才能轻松阻止这种阻塞行为?

4

4 回答 4

1

通常,您需要在单独的线程上显示启动画面,并让主线程继续加载。不是微不足道的 - 特别是,您需要使用Control.Invoke来要求启动屏幕在准备好时自行关闭(线程关联)......

于 2009-02-04T16:29:59.597 回答
1

我已经用一个关于你问同样问题的另一个问题的工作示例回复了你:

C# winforms 启动(Splash)表单不隐藏

于 2009-02-04T16:33:02.587 回答
0

使用 splash.Open() 而不是 splash.OpenDialog() 这不会发生。

于 2009-02-04T16:29:44.620 回答
0

基本上,您只想向您展示启动表单,而不是让它阻塞主表单。

这是我的做法:

class MainForm : Form {

    SplashScreen splash = new SplashScreen();  //Make your splash screen member

    public MainForm()
    {
        splash.Show();  //Just show the form
    }

}

然后在您的 MainForm_Load 中,您照常进行初始化。

现在,当您的表单准备好显示时(MainForm_Shown):

public MainForm_Shown()
{
    splash.Close();
}

这让您的 MainForm 在显示初始屏幕时正常加载。

于 2009-02-04T16:31:28.690 回答