如果在启动时出现错误,如何在显示MessageBox后立即退出Windows窗体应用程序?

时间:2010-11-04 13:11:16

标签: .net winforms

在启动Windows窗体应用程序时,我读取了一个XML文件。如果此文件不存在或没有特定设置,我想向用户显示指示问题的MessageBox,然后关闭应用程序。

我尝试在主要表单的Load事件中使用Application.Exit()执行此操作,如下所示:

private void MainForm_Load(object sender, EventArgs e)
{
    if (!StartupSettingsCorrect())
    {
        MessageBox.Show("Blabla... Can't start application.");
        Application.Exit();
    }

    // Other stuff...
}

但这似乎并不干净。 (应用程序正在运行,但屏幕上没有任何形式的“隐形”。)

在这种情况下,什么是干净关机的最佳方式和地点?

提前感谢您的帮助!

7 个答案:

答案 0 :(得分:10)

Environment.Exit()应该做到这一点。在你描述的情况下,至少它对我有用。

根据MSDN,此方法

  

终止此过程并为底层操作系统提供指定的退出代码。

答案 1 :(得分:3)

在Program.cs文件的Main方法中读取XML文件(应该为您自动生成)。如果您收到错误,请不要加载表单。

    static void Main ()
    {
        if ( !StartupSettingsCorrect())
        {
            MessageBox.Show( "Blabla... Can't start application." );
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );
            Application.Run( new MainForm() );
        }
    }

答案 2 :(得分:2)

如果未满足某些先决条件,此技术可以避免首先启动主窗体。

在你离开MessageBox之前,你的应用程序不会被卸载。

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        if (!StartupSettingsCorrect())
        {
            MessageBox.Show("Blabla... Can't start application.");
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

答案 3 :(得分:1)

Application.Exit方法停止所有线程上的所有正在运行的消息循环并关闭所有应用程序窗口。但取决于它何时被调用,它并不一定会迫使该过程结束。如果在加载主表单之前调用Application.Exit,那应该可以。

另一种解决方案是关闭您的主表单 - 其余的将随后为您处理。这相当于使用Application.Shutdown

否则您可以使用Environment.Exit。我相信这会终止进程而不会展开堆栈并且不执行finally块。所以这很粗鲁,但在你目前的背景下这可能不是问题。

答案 4 :(得分:1)

建议仅控制台应用

Environment.Exit()

对于 Winforms ,请使用Application.Exit()

如果要在加载主窗体之前退出程序,“colinsmith”提供的示例很好!

答案 5 :(得分:0)

在Form_Load中:

Me.Visible = False

if yourCheckNotOk then
  MessageBox("check failed..")
  Me.close()
else
  ...
  ...
  ...
  Me.Visible = True
end if

使用VS 2010进行测试。(假设在项目设置中将关闭模式设置为“启动表单关闭时”,并且Load事件是启动表单的事件)

答案 6 :(得分:0)

Form.Dispose()可用于完全释放该程序持有的资源。

private void MainForm_Load(object sender, EventArgs e)
{
    if (!StartupSettingsCorrect())
    {
        MessageBox.Show("Blabla... Can't start application.");
        Me.Dispose();
    }

    // Other stuff...
}

我认为,这可以用于清除资源和完全退出应用程序。