c#one表单在winform项目中阻止另一个

时间:2009-02-04 16:23:25

标签: c# winforms forms blocking

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

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.Close();

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

4 个答案:

答案 0 :(得分:1)

通常,您需要在单独的线程上显示启动画面,并让主线程继续加载。这不是微不足道的 - 特别是,你需要使用Control.Invoke让闪屏在准备就绪时关闭(线程亲和力)...

答案 1 :(得分:1)

我已经就你要求同样事情的另一个问题的答案向你回复:

C# winforms startup (Splash) form not hiding

答案 2 :(得分:0)

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

答案 3 :(得分: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。