我的WinForm在显示后立即关闭

时间:2014-01-05 22:03:36

标签: c# .net winforms

在我展示我的WinForm之后,它立即关闭。我有三个WinForms:我的第一个,一个进度条,然后是我的主要一个。在启动WinForm上,用户单击一个按钮,将其引导至进度条。然后,一旦完成进度,它将通过另一个类中的函数运行主窗体,但随后立即关闭。它看起来像这样:

//Starting WinForm
private void button1_Click(object sender, EventArgs e)
{
    ProgressBarForm PBF = new ProgressBarForm();
    PBF.Show();
    this.Close();
}
//Progress Bar Form stuff
private void ProgressBarForm_Shown(object sender, EventArgs e)
{
    // Stuff for progress bar to load
    progressBar1.Maximum = 100;
    if (progressBar1.Value == 100) 
    {
       Main.ExecuteMain();
    }
}
// In main class
public static void ExecuteMain()
{
    MainForm MF = new MainForm();
    MF.Show()

    // Other stuff that leads to another function
}

就在那里它会立即关闭。我已经尝试为它运行一个单独的线程,但它仍然无效。我已经尝试将其保留在while循环中,但它会不断加载并且不允许任何交互。此外,如果这很重要,我也试图在表格上画画。我的问题是,为什么WinForm立即关闭而另外两个不关闭?

3 个答案:

答案 0 :(得分:3)

PBF.Show();更改为PBF.ShowDialog();

你马上关上窗户 - 这就是它关闭的原因。

答案 1 :(得分:0)

你需要申报 在主类

 Public MainForm MF 

在其他班级

private void ProgressBarForm_Shown(object sender, EventArgs e)
{
    // Stuff for progress bar to load
    progressBar1.Maximum = 100;
    if (progressBar1.Value == 100) 
    {
        Main.MF=new Main.MainForm();
        Main.MF.Show(); // open form or
        // Main.MF.ShowDialog();  open modal form 
    }
}

答案 2 :(得分:0)

原因是Application.Run()方法中的Main调用是通过表单传递的,并在该表单关闭时退出消息循环。您可能希望将真实的主表单传递给Application.Run()(将其隐藏,在进度条完成之前不显示)