代码之家  ›  专栏  ›  技术社区  ›  Slauma

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

  •  3
  • Slauma  · 技术社区  · 14 年前

    我试着在 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 回复  |  直到 14 年前
        1
  •  10
  •   dandan78 Tom Cool    14 年前

    Environment.Exit() 应该会成功的。至少在你描述的情况下对我有用。

    根据 MSDN

    终止此过程,并向基础操作系统指定指定的退出代码。

        2
  •  3
  •   TLiebe    14 年前

    读取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() );
            }
        }
    
        3
  •  2
  •   Colin Smith    14 年前

    如果不满足一些先决条件,这种技术首先避免启动主窗体。

    你的应用程序将不会被卸载,直到你出来的消息框。

    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());
            }
        }
    }
    
        4
  •  1
  •   HTTP 410    14 年前

    这个 Application.Exit 方法停止所有线程上所有正在运行的消息循环,并关闭所有应用程序窗口。但取决于何时调用,它并不一定会强制进程结束。如果你在加载主窗体之前调用Apvest.Exchange,那就行了。

    另一个解决方案是关闭主窗体-剩下的将为您处理。这相当于使用 Application.Shutdown .

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

        5
  •  1
  •   GraphicsMuncher    12 年前

    Environment.Exit() 控制台应用程序 .

    为了 ,使用 Application.Exit()

    如果你想退出程序之前,加载主窗体,由“科林史密斯”提供的例子是好的!

        6
  •  0
  •   Evolved    13 年前

    在表单加载中:

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

    与VS2010一起测试。(假设在项目设置中将关闭模式设置为“启动窗体关闭时”,并且加载事件是启动窗体的事件)

        7
  •  0
  •   Praveen Vinny    12 年前

    可以使用Form.Dispose()完全释放该程序所拥有的资源。

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

    我想,这对于清理资源和完全退出应用程序是很好的。